小心 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
原文转载:http://www.shaoqun.com/a/524581.html
tinypic:https://www.ikjzd.com/w/114
bsci:https://www.ikjzd.com/w/2339
小心EnumParse中的坑小心EnumParse中的坑Intro最近使用枚举的时候,踩了一个小坑,分享一下,主要是枚举从int值转成枚举时可能会遇到Sample来看下面的示例:首先定义一个枚举:publicenumColor:byte{Red=0,Green=1,Blue=2,}来看一下下面的代码,下面的代码会抛异常吗?Console.WriteLine(((Color)10).ToString
文化衫事件:文化衫事件
cicpa:cicpa
欧代是什么?Amazon亚马逊卖家欧代注册流程,费用和时效详细解。:欧代是什么?Amazon亚马逊卖家欧代注册流程,费用和时效详细解。
外媒预测2020年的5大电商发展趋势,卖家了解一下!:外媒预测2020年的5大电商发展趋势,卖家了解一下!
口述:新婚夜老婆说立完规矩再圆房:口述:新婚夜老婆说立完规矩再圆房
No comments:
Post a Comment