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#中,如果你有一个List<Tuple<double, int>>类型的集合mm,并且你想要根据Tuple中的double值(即第一个元素)从小到大进行排序,同…...
“华为杯”第十六届中国研究生数学建模竞赛-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个页面(带js)ui还原度百分之90 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑…...
018 | backtrader回测反转策略
什么是反转策略? 反转策略(Reversal Strategy)是一种试图捕捉市场价格趋势逆转的交易策略。与趋势跟随策略不同,反转策略的核心理念是“物极必反”,即价格在经过一段时间的单边趋势后,往往会出现逆转的机会…...
《图解HTTP》全篇目录
前言 目前,国内讲解 HTTP 协议的书实在太少了。在我的印象中,讲解网络协议的书仅有两本。一本是《HTTP 权威指南》,但其厚度令人望而生畏;另一本是《TCP/IP 详解,卷 1》,内容艰涩难懂,学习难度…...
基于VS2019(Release_x64)+Qt的软件开发—环境配置
前置博客: 基于C高级编程语言的软件开发随记——环境变量-CSDN博客 (一)一种避免设置大量环境变量的VS2019环境配置方法 Ⅰ 解决方案资源管理器->VC目录->在包含目录/库目录中添加对应的include/lib文件夹($(So…...
【书生大模型实战营(暑假场)闯关材料】入门岛:第1关 Linux 基础知识
【书生大模型实战营(暑假场)闯关材料】入门岛:第1关 Linux 基础知识 1. 使用VScode进行SSH远程连接服务器2. 端口映射及实例参考文献 这一博客主要介绍使用VScode进行服务器远程连接及端口映射。 1. 使用VScode进行SSH远程连接服务器 安装V…...
240810-Gradio通过HTML组件打开本地文件+防止网页跳转到about:blank
A. 最终效果 B. 可通过鼠标点击打开文件,但会跳转到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(32-bit ARM),你需要下载 armv6l 版的Go语言。 如果你的系统是 aarch64(64-bit ARM),你需要下载 arm64 版的Go语言。 如果你的系统是 x86_64…...
算法日记day 35(动归之分割等和子集|最后一块石头的重量2)
一、分割等和子集 题目: 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums [1,5,11,5] 输出:true 解释:数组可以分…...
FPGA使用sv生成虚拟单音数据
FPGA使用sv生成虚拟单音数据 之前一直使用matlab生成虚拟的数据,导出到txt或是coe文件中,再导入到fpga中进行仿真测试。 复杂的数据这样操作自然是必要的,但是平日使用正弦数据进行测试的话,这样的操作不免复杂,今日…...
Linux shell编程:监控进程CPU使用率并使用 perf 抓取高CPU进程信息
0. 概要 本文将介绍一个用于监控一组进程CPU使用率的Shell脚本,,当检测到某进程的CPU使用率超出阈值时,使用 perf 工具抓取该进程的详细信息。 本shell脚本为了能在普通嵌入式系统上运行做了妥协和优化。 1. shell脚本流程的简要图示&#…...
Linux网络编程的套接字分析(其一,基本知识)
文章目录 套接字的类型流套接字数据报套接字原始套接字 套接字地址获取套接字地址 协议族和地址族 套接字的类型 Linux系统的套接字有三类:流套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAM)。 流套接字 用于面向连接…...
后端Web开发之Maven
1.java项目构建工具maven介绍 Maven是apache旗下的一个开源项目。Apache软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源(源代码开放)软件基金会也是一一个专门为支持开源项目而生的非盈利性组织。 apache开源项目…...
前端创新实践:用JavaScript打造网页扫码新体验
引言 简述扫码技术在现代网页应用中的普及和重要性。引入JavaScript实现网页扫码功能的创新性和实用性。 扫码技术概述 介绍扫码技术的原理和在不同平台(如微信、支付宝)的应用。讨论扫码技术对用户体验和业务流程的影响。 JavaScript实现网页扫码的…...
AWS CLI命令行
参考文档:在 macOS 上安裝,更新和卸載 AWS CLI 版本 1 - AWS Command Line Interface...
领导力培养的底层逻辑
领导力就是从人们从他们现在的地方,到他们从未去过的地方的能力--基辛格 ## 1. 领导力的一些观点 ## 2. 五种习惯十大承诺 ## 3. 需要领导的场景 ## 4.0 组织中谁需要领导力 ## 5.0 领导力培养 领导力培养的底层逻辑可以简单描述为以下几个方面: 管理…...
【MATLAB第107期】基于MATLAB的Morris局部敏感性分析模型(无目标函数)
【MATLAB第107期】基于MATLAB的Morris局部敏感性分析模型(无目标函数) 更正: 局部敏感性分析方法 一、原理介绍 1.基本原理: Morris方法采用概率均匀抽样的方式估计每个模型输入因子在输出结果中的重要性,通过比较系…...
Tomcat搭建JSPServlet
一、Tomcat环境搭建 1. 将项目变为Web项目 选中项目,点击Help中的Find Action 搜索Add Framework Support 勾选Web Application 出现这些文件就是成功了 2. 配置Tomcat 点击Edit Configurations 点击加号,选择Tomcat Server Local Deployment栏下点击…...
32位定点数和32/64位浮点数的二进制生成方法
问题由来 定点数和浮点数在嵌入式软件处理和FPGA算法方面使用比较普遍,但是遇到FPGA实现32位定点数的处理,想要仿真时,突然发现全网都在讲浮点数和定点数的格式和理论,几乎没有生成的快捷方法,好在一片文章出现了一点…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
