当前位置: 首页 > news >正文

c# 排序、强转枚举

在这里插入图片描述

List<Tuple<double,int>> mm中doble从小到大排序 mm本身排序

在C#中,如果你有一个List<Tuple<double, int>>类型的集合mm,并且你想要根据Tuple中的double值(即第一个元素)从小到大进行排序,同时希望这个排序能够反映到mm本身(即原地排序),你可以使用List的Sort方法,并传入一个自定义的比较器。

由于Tuple类本身不直接支持比较操作(至少在C# 7.3之前的版本中是这样),你需要定义一个比较器来实现这一点。在C# 7.3及更高版本中,Tuple类支持比较操作,但如果你使用的是旧版本的C#或者想要更明确地控制比较逻辑,定义一个比较器总是一个好选择。

下面是一个如何根据Tuple中的double值对List<Tuple<double, int>>进行排序的示例:

csharp
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
static void Main()
{
List<Tuple<double, int>> mm = new List<Tuple<double, int>>
{
Tuple.Create(3.14, 1),
Tuple.Create(1.59, 2),
Tuple.Create(2.65, 3),
Tuple.Create(4.20, 4),
Tuple.Create(0.00, 5)
};

    // 使用Sort方法和自定义比较器对mm进行排序  mm.Sort((a, b) => a.Item1.CompareTo(b.Item1));  // 输出排序后的mm  foreach (var item in mm)  {  Console.WriteLine($"({item.Item1}, {item.Item2})");  }  
}  

}
在这个示例中,Sort方法接受一个Comparison委托,其中T是列表中的元素类型(在这个例子中是Tuple<double, int>)。Comparison委托需要一个接受两个T类型参数并返回一个整数的函数,该函数根据比较结果返回小于零、零或大于零的值。

在比较器中,我使用了Tuple的Item1属性(即double值)来调用CompareTo方法进行比较。这样,mm就会根据Tuple中的double值进行从小到大的排序了。

c# int转enum

在C#中,将一个int值转换为一个enum(枚举)类型是一个常见的操作。枚举(enum)是一种特殊的值类型,它使变量成为一组命名的整型常量的集合。尽管枚举的底层类型默认是int,但你也可以将其定义为其他整型(如byte、short、long等)。要将int转换为enum,你可以使用类型转换(强制类型转换或隐式转换,具体取决于上下文)。

以下是一个示例,展示了如何将int转换为enum:

首先,定义一个枚举:

csharp
enum Days
{
Sunday = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6
}
然后,你可以使用以下任一方法将int转换为Days枚举:

隐式转换(如果枚举成员的值与int值完全匹配)
如果int值直接对应于枚举中的一个成员,则可以使用隐式转换:

csharp
int dayInt = 3;
Days dayEnum = (Days)dayInt; // 显式转换,但在这个例子中实际上是隐式的,因为直接匹配
// 或者,如果编译器能确定类型,可以直接写作
// Days dayEnum = dayInt; // 注意:这通常不直接工作,因为编译器需要明确的上下文

Console.WriteLine(dayEnum); // 输出: Wednesday
显式转换(强制类型转换)
当你不确定int值是否对应枚举中的一个成员时,使用显式转换(也称为强制类型转换)是一个好习惯。这告诉编译器你了解可能的风险,并希望执行转换:

csharp
int dayInt = 9; // 假设这不是枚举中的有效值
Days dayEnum;

try
{
dayEnum = (Days)dayInt; // 尝试转换
Console.WriteLine(dayEnum); // 如果dayInt是有效值,将输出对应的枚举成员名
}
catch (InvalidCastException)
{
Console.WriteLine(“dayInt不是一个有效的Days枚举值。”);
}

// 另一种处理方式是使用Enum.IsDefined来检查值是否有效
if (Enum.IsDefined(typeof(Days), dayInt))
{
dayEnum = (Days)dayInt;
Console.WriteLine(dayEnum);
}
else
{
Console.WriteLine(“dayInt不是一个有效的Days枚举值。”);
}
注意,尝试将未定义在枚举中的int值强制转换为枚举类型时,将会抛出InvalidCastException异常。使用Enum.IsDefined方法可以安全地检查一个int值是否对应于枚举中的一个有效成员,从而避免异常。
参考

c# Enum强制转换为int

在C#中,将Enum(枚举)强制转换为int(或隐式转换为int,因为枚举的底层类型默认是int)是直截了当的。由于枚举本质上是一组命名的整型常量,所以它们可以很容易地与int类型相互转换。

显式转换(强制类型转换)
虽然大多数情况下隐式转换就足够了,但如果你想要明确表示你的意图,或者想要强调转换过程,你可以使用显式转换(也称为强制类型转换)。

csharp
enum Days
{
Sunday = 0,
Monday = 1,
Tuesday = 2,
// … 其他天
}

Days today = Days.Monday;

// 显式转换为int
int dayAsInt = (int)today;

Console.WriteLine(dayAsInt); // 输出: 1
隐式转换
由于枚举的底层类型是int(除非你显式地将其指定为其他整型,如byte、short、long等),所以你可以直接将枚举值赋给int类型的变量,而不需要进行任何显式转换。但请注意,这种隐式转换在代码可读性方面可能不如显式转换那么清晰。

csharp
enum Days
{
Sunday = 0,
Monday = 1,
// … 其他天
}

Days today = Days.Tuesday;

// 隐式转换为int
int dayAsInt = today; // 不需要显式转换

Console.WriteLine(dayAsInt); // 输出: 2
注意事项
当你将int值转换回枚举时,如果int值不是枚举中定义的有效值,那么你将得到一个有效的枚举值,但它可能不是你预期的那个。这是因为枚举值在内部以int形式存储,并且如果提供的值超出了枚举定义的范围,它将简单地回绕到枚举的起始值(或某个其他值,具体取决于枚举的具体实现和.NET版本)。然而,从C# 7.3开始,你可以使用Enum.HasFlag(对于标志枚举)或Enum.IsDefined(对于非标志枚举)来检查一个int值是否对应于枚举中的一个有效成员。
如果你将枚举的底层类型更改为非int类型(如byte、short、long等),则隐式转换和显式转换都将遵循你指定的底层类型。但是,在将枚举值赋给不同底层类型的变量时,你可能仍然需要进行显式转换。

相关文章:

c# 排序、强转枚举

List<Tuple<double,int>> mm中doble从小到大排序 mm本身排序 在C#中&#xff0c;如果你有一个List<Tuple<double, int>>类型的集合mm&#xff0c;并且你想要根据Tuple中的double值&#xff08;即第一个元素&#xff09;从小到大进行排序&#xff0c;同…...

“华为杯”第十六届中国研究生数学建模竞赛-C题:视觉情报信息分析

目录 摘 要: 一、问题重述 二、模型假设 三、符号说明 四、问题一分析与求解 4.1 问题一分析 4.2 模型建立 4.2.1 位置变换模型建立 4.2.4 多平面转换模型建立 4.3 模型求解 4.3.1 问题一图 1 结果 4.3.2 问题一图 2 结果 4.3.3 问题一图 3 结果 4.3.4 问题一图 4 结果 4.4 模…...

html+css+js网页设计 找法网2个页面(带js)ui还原度百分之90

htmlcssjs网页设计 找法网2个页面&#xff08;带js&#xff09;ui还原度百分之90 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑…...

018 | backtrader回测反转策略

什么是反转策略&#xff1f; 反转策略&#xff08;Reversal Strategy&#xff09;是一种试图捕捉市场价格趋势逆转的交易策略。与趋势跟随策略不同&#xff0c;反转策略的核心理念是“物极必反”&#xff0c;即价格在经过一段时间的单边趋势后&#xff0c;往往会出现逆转的机会…...

《图解HTTP》全篇目录

前言 目前&#xff0c;国内讲解 HTTP 协议的书实在太少了。在我的印象中&#xff0c;讲解网络协议的书仅有两本。一本是《HTTP 权威指南》&#xff0c;但其厚度令人望而生畏&#xff1b;另一本是《TCP/IP 详解&#xff0c;卷 1》&#xff0c;内容艰涩难懂&#xff0c;学习难度…...

基于VS2019(Release_x64)+Qt的软件开发—环境配置

前置博客&#xff1a; 基于C高级编程语言的软件开发随记——环境变量-CSDN博客 &#xff08;一&#xff09;一种避免设置大量环境变量的VS2019环境配置方法 Ⅰ 解决方案资源管理器->VC目录->在包含目录/库目录中添加对应的include/lib文件夹&#xff08;$&#xff08;So…...

【书生大模型实战营(暑假场)闯关材料】入门岛:第1关 Linux 基础知识

【书生大模型实战营&#xff08;暑假场&#xff09;闯关材料】入门岛&#xff1a;第1关 Linux 基础知识 1. 使用VScode进行SSH远程连接服务器2. 端口映射及实例参考文献 这一博客主要介绍使用VScode进行服务器远程连接及端口映射。 1. 使用VScode进行SSH远程连接服务器 安装V…...

240810-Gradio通过HTML组件打开本地文件+防止网页跳转到about:blank

A. 最终效果 B. 可通过鼠标点击打开文件&#xff0c;但会跳转到about:blank import gradio as gr import subprocessdef open_pptx():pptx_path /Users/liuguokai/Downloads/240528-工业大模型1.pptxtry:subprocess.Popen([open, pptx_path])return "PPTX file opened s…...

go在linux上安装

1.首先要确定Linux架构 uname -m如果你的系统是 armv7l&#xff08;32-bit ARM&#xff09;&#xff0c;你需要下载 armv6l 版的Go语言。 如果你的系统是 aarch64&#xff08;64-bit ARM&#xff09;&#xff0c;你需要下载 arm64 版的Go语言。 如果你的系统是 x86_64&#xf…...

算法日记day 35(动归之分割等和子集|最后一块石头的重量2)

一、分割等和子集 题目&#xff1a; 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分…...

FPGA使用sv生成虚拟单音数据

FPGA使用sv生成虚拟单音数据 之前一直使用matlab生成虚拟的数据&#xff0c;导出到txt或是coe文件中&#xff0c;再导入到fpga中进行仿真测试。 复杂的数据这样操作自然是必要的&#xff0c;但是平日使用正弦数据进行测试的话&#xff0c;这样的操作不免复杂&#xff0c;今日…...

Linux shell编程:监控进程CPU使用率并使用 perf 抓取高CPU进程信息

0. 概要 本文将介绍一个用于监控一组进程CPU使用率的Shell脚本&#xff0c;&#xff0c;当检测到某进程的CPU使用率超出阈值时&#xff0c;使用 perf 工具抓取该进程的详细信息。 本shell脚本为了能在普通嵌入式系统上运行做了妥协和优化。 1. shell脚本流程的简要图示&#…...

Linux网络编程的套接字分析(其一,基本知识)

文章目录 套接字的类型流套接字数据报套接字原始套接字 套接字地址获取套接字地址 协议族和地址族 套接字的类型 Linux系统的套接字有三类&#xff1a;流套接字(SOCK_STREAM)&#xff0c;数据报套接字(SOCK_DGRAM)&#xff0c;原始套接字(SOCK_RAM)。 流套接字 用于面向连接…...

后端Web开发之Maven

1.java项目构建工具maven介绍 Maven是apache旗下的一个开源项目。Apache软件基金会&#xff0c;成立于1999年7月&#xff0c;是目前世界上最大的最受欢迎的开源&#xff08;源代码开放&#xff09;软件基金会也是一一个专门为支持开源项目而生的非盈利性组织。 apache开源项目…...

前端创新实践:用JavaScript打造网页扫码新体验

引言 简述扫码技术在现代网页应用中的普及和重要性。引入JavaScript实现网页扫码功能的创新性和实用性。 扫码技术概述 介绍扫码技术的原理和在不同平台&#xff08;如微信、支付宝&#xff09;的应用。讨论扫码技术对用户体验和业务流程的影响。 JavaScript实现网页扫码的…...

AWS CLI命令行

参考文档&#xff1a;在 macOS 上安裝&#xff0c;更新和卸載 AWS CLI 版本 1 - AWS Command Line Interface...

领导力培养的底层逻辑

领导力就是从人们从他们现在的地方&#xff0c;到他们从未去过的地方的能力--基辛格 ## 1. 领导力的一些观点 ## 2. 五种习惯十大承诺 ## 3. 需要领导的场景 ## 4.0 组织中谁需要领导力 ## 5.0 领导力培养 领导力培养的底层逻辑可以简单描述为以下几个方面&#xff1a; 管理…...

【MATLAB第107期】基于MATLAB的Morris局部敏感性分析模型(无目标函数)

【MATLAB第107期】基于MATLAB的Morris局部敏感性分析模型&#xff08;无目标函数&#xff09; 更正&#xff1a; 局部敏感性分析方法 一、原理介绍 1.基本原理&#xff1a; Morris方法采用概率均匀抽样的方式估计每个模型输入因子在输出结果中的重要性&#xff0c;通过比较系…...

Tomcat搭建JSPServlet

一、Tomcat环境搭建 1. 将项目变为Web项目 选中项目&#xff0c;点击Help中的Find Action 搜索Add Framework Support 勾选Web Application 出现这些文件就是成功了 2. 配置Tomcat 点击Edit Configurations 点击加号&#xff0c;选择Tomcat Server Local Deployment栏下点击…...

32位定点数和32/64位浮点数的二进制生成方法

问题由来 定点数和浮点数在嵌入式软件处理和FPGA算法方面使用比较普遍&#xff0c;但是遇到FPGA实现32位定点数的处理&#xff0c;想要仿真时&#xff0c;突然发现全网都在讲浮点数和定点数的格式和理论&#xff0c;几乎没有生成的快捷方法&#xff0c;好在一片文章出现了一点…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...