小心 Enum Parse 中的坑
小心 Enum Parse 中的坑
Intro
最近使用枚举的时候,踩了一个小坑,分享一下,主要是枚举从 int 值转成枚举时可能会遇到
Sample
来看下面的示例:
首先定义一个枚举:
public enum Color : byte
{Red = 0,Green = 1,Blue = 2,
}
来看一下下面的代码,下面的代码会抛异常吗?
Console.WriteLine(((Color)10).ToString());
再来看下面的代码,下面的代码又会怎么样呢,输出结果是什么?
var intValue = int.MaxValue;
Console.WriteLine(((Color)intValue).ToString());
输出结果如下:
从上面的结果看得出来,从 int 值直接做转换的时候,结果可能并不是期望的,不会抛异常,那么又该如何处理呢?我们再来看一个示例
ParseSample
Enum
的 Parse
方法不仅支持从 Name
的字符串比如前面定义的枚举中的 Red
/Green
,还可以支持从 int
的字符串也就是 0
/1
/2
,来看下面的示例:
if (Enum.TryParse("10", out Color color))
{Console.WriteLine(color.ToString());
}if (Enum.TryParse("10", out Color color1)&& Enum.IsDefined(typeof(Color), color1))
{Console.WriteLine($"Success, {color1}");
}
else
{Console.WriteLine("Can not match");
}
来直接看输出结果吧:
Parse from name
再来看一个从 Name 转换的一个示例:
if (Enum.TryParse("Yellow", out Color color2))
{Console.WriteLine(color2.ToString());
}
这个不会有任何输出,TryParse
会直接返回 false
More
当枚举从 int 值转换的时候,需要小心,即使 int 值在枚举中没有定义也会转换成功,如果要确保枚举中定义了对应的值时,应该使用 IsDefined
来确保枚举定义了对应的值
Reference
https://docs.microsoft.com/en-us/dotnet/api/system.enum.tryparse?view=net-5.0
小心 Enum Parse 中的坑相关推荐
- 小心Lombok用法中的坑
刚才写完了代码,自测的时候,出现了NPE问题. 排查的时候发现是Lombok的坑,以前也遇到过,所以觉得有必要过来记录一下. 我先描述一下现象,我的代码里面订单服务A 需要调用缓存服务B,服务B就是一 ...
- (四)Asp.net web api中的坑-【api的返回值】
(四)Asp.net web api中的坑-[api的返回值] 原文:(四)Asp.net web api中的坑-[api的返回值] void无返回值 IHttpActionResult HttpRe ...
- JDK中的坑:JDK中这些方法的bug你不要踩
点击关注公众号,Java干货及时送达 图片来源:白夜追凶 前言: jdk作为我们每天必备的调用类库,里面大量提供了基础类供我们使用.可以说离开jdk,我们的java代码寸步难行,jdk带给我们的便利可 ...
- 学习笔记---取得枚举项的2种方法: Enum.GetValues()-Array.GetValue()和Enum.GetNames()-Enum.Parse()...
代码 namespace EnumDemo { public enum Color { red = 0, orange =1, yellow =2, green=4, blue =5, cyan =6 ...
- C# System.Timers.Timer中的坑,程序异常退出后timer依然运行问题
C# System.Timers.Timer中的坑,程序异常退出后timer依然运行问题 参考文章: (1)C# System.Timers.Timer中的坑,程序异常退出后timer依然运行问题 ( ...
- 决策树python建模中的坑 :ValueError: Expected 2D array, got 1D array instead:
决策树python建模中的坑 代码 #coding=utf-8 from sklearn.feature_extraction import DictVectorizerimport csvfrom ...
- 小心VB.NET中的除运算符/和/
小心VB.NET中的除运算符"/"和"/" VB.NET中除运算符有两种,普通除"/"和整数除"/",如果我们写程序时不 ...
- 0编译器详解_详解Java枚举类型(Enum)中的方法
文章前记 程序员工作久了便可能整日忙碌于"增删改查"中,迷失方向,毫无进步. 该公众号致力于分享软件开发相关的原创干货,助你完成从程序员到架构师的进阶之路! 努力!做一个NB的Co ...
- mysql 主从 通俗易懂_MySQL 主从同步架构中你不知道的“坑”(完结篇)
MySQL 主从同步架构中你不知道的"坑"(完结篇) 收录于话题 #MySQL从入门到放弃 26个 点击上方蓝字,关注我们哟! 前言导读 之前写出一篇文章也是关于这个主从同步架构的 ...
最新文章
- Xamarin Anroid App访问网站失败
- linux下载文件的常用命令wget
- Java NIO学习系列二:Channel
- ML之二分类预测:以岩石水雷数据集(RockMine)为例从0到1深入理解科学预测之分类问题的思路框架(特征工程详细步骤(特征分析与特征处理)+分类模型设计)
- More Effective C# Item3 : 运行时检查泛型参数的类型并提供特定的算法
- Android入门(15)| 网络
- 螺旋数组算法[中篇]--常规数学分析
- 拓端tecdat|stata具有异方差误差的区间回归
- html是用来表示网上信息的符号标记语言,html标记的一般格式
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 驾考维语版本-维语驾考手机电脑版-民语驾考网
- Windows 8 平板电脑体验及思考
- web 打开pdf文件
- Python 玩转数据 8 - Pandas Indexing and Slicing
- 微博运营怎么做才能吸引更多的粉丝?
- AngularJS学习笔记-2
- 计算机专业去,计算机专业去哪个学校_西信院
- 小米路由器安装mysql_小米路由器安装和设置方法(图文教程)
- U3D中的常用字符串加密算法程序
- Linux编译命令 make -j8 的意义