• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

小心 Enum Parse 中的坑

其他 WeihanLi 2275次浏览 0个评论

小心 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

  • https://docs.microsoft.com/en-us/dotnet/api/system.enum.tryparse?view=net-5.0


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明小心 Enum Parse 中的坑
喜欢 (0)

您必须 登录 才能发表评论!

加载中……