小心 Enum Parse 中的坑
生活随笔
收集整理的這篇文章主要介紹了
小心 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 中的坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 代码 | 一天一点代码坏味道(1)
- 下一篇: 记一次CPU持续100%及分析方法