欢迎光临
我的个人博客网站

小心 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()); 

输出结果如下:

小心 Enum Parse 中的坑

从上面的结果看得出来,从 int 值直接做转换的时候,结果可能并不是期望的,不会抛异常,那么又该如何处理呢?我们再来看一个示例

ParseSample

EnumParse 方法不仅支持从 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"); } 

来直接看输出结果吧:

小心 Enum Parse 中的坑

Parse from name

再来看一个从 Name 转换的一个示例:

if (Enum.TryParse("Yellow", out Color color2)) {     Console.WriteLine(color2.ToString()); } 

这个不会有任何输出,TryParse 会直接返回 false

More

当枚举从 int 值转换的时候,需要小心,即使 int 值在枚举中没有定义也会转换成功,如果要确保枚举中定义了对应的值时,应该使用 IsDefined 来确保枚举定义了对应的值

Reference

赞(0) 打赏
未经允许不得转载:张拓的天空 » 小心 Enum Parse 中的坑
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专业的IT技术经验分享 更专业 更方便

联系我们本站主机

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏