踩坑了,C#枚舉轉(zhuǎn)換要小心!
小心 Enum Parse 中的坑
Intro
最近使用枚舉的時候,踩了一個小坑,分享一下,主要是枚舉從 int 值轉(zhuǎn)成枚舉時可能會遇到
Sample
來看下面的示例:
首先定義一個枚舉:
public enum Color : byte
{
Red = 0,
Green = 1,
Blue = 2,
}
來看一下下面的代碼,下面的代碼會拋異常嗎?
Console.WriteLine(((Color)10).ToString());
再來看下面的代碼,下面的代碼又會怎么樣呢,輸出結(jié)果是什么?
var intValue = int.MaxValue;
Console.WriteLine(((Color)intValue).ToString());
輸出結(jié)果如下:
從上面的結(jié)果看得出來,從 int 值直接做轉(zhuǎn)換的時候,結(jié)果可能并不是期望的,不會拋異常,那么又該如何處理呢?我們再來看一個示例
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");
}
來直接看輸出結(jié)果吧:
Parse from name
再來看一個從 Name 轉(zhuǎn)換的一個示例:
if (Enum.TryParse("Yellow", out Color color2))
{
Console.WriteLine(color2.ToString());
}
這個不會有任何輸出,TryParse 會直接返回 false
More
當(dāng)枚舉從 int 值轉(zhuǎn)換的時候,需要小心,即使 int 值在枚舉中沒有定義也會轉(zhuǎn)換成功,如果要確保枚舉中定義了對應(yīng)的值時,應(yīng)該使用 IsDefined 來確保枚舉定義了對應(yīng)的值
Reference
- https://docs.microsoft.com/en-us/dotnet/api/system.enum.tryparse?view=net-5.0
回復(fù) 【關(guān)閉】 學(xué)永久關(guān)閉App開屏廣告 回復(fù) 【刪除】學(xué)自動檢測那個微信好友刪除、拉黑 回復(fù) 【手冊】 獲取3萬字.NET、C#工程師面試手冊 回復(fù) 【幫助】獲取100+個常用的C#幫助類庫 回復(fù) 【加群】加入DotNet學(xué)習(xí)交流群
評論
圖片
表情
