<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          踩坑了,C#枚舉轉(zhuǎn)換要小心!

          共 1464字,需瀏覽 3分鐘

           ·

          2021-02-05 09:01

          小心 Enum Parse 中的坑

          Intro

          最近使用枚舉的時(shí)候,踩了一個(gè)小坑,分享一下,主要是枚舉從 int 值轉(zhuǎn)成枚舉時(shí)可能會遇到

          Sample

          來看下面的示例:

          首先定義一個(gè)枚舉:

          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)換的時(shí)候,結(jié)果可能并不是期望的,不會拋異常,那么又該如何處理呢?我們再來看一個(gè)示例

          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");
          }

          來直接看輸出結(jié)果吧:

          Parse from name

          再來看一個(gè)從 Name 轉(zhuǎn)換的一個(gè)示例:

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

          這個(gè)不會有任何輸出,TryParse 會直接返回 false

          More

          當(dāng)枚舉從 int 值轉(zhuǎn)換的時(shí)候,需要小心,即使 int 值在枚舉中沒有定義也會轉(zhuǎn)換成功,如果要確保枚舉中定義了對應(yīng)的值時(shí),應(yīng)該使用 IsDefined 來確保枚舉定義了對應(yīng)的值

          Reference

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







          公眾號內(nèi)回復(fù)即可領(lǐng)取干貨
          回復(fù)?【關(guān)閉】學(xué)關(guān)
          回復(fù)?【實(shí)戰(zhàn)】獲取20套實(shí)戰(zhàn)源碼
          回復(fù)?【被刪】學(xué)個(gè)
          回復(fù)?【訪客】學(xué)
          回復(fù)?【小程序】學(xué)獲取15套【入門+實(shí)戰(zhàn)+賺錢】小程序源碼
          回復(fù)?【python】學(xué)微獲取全套0基礎(chǔ)Python知識手冊
          回復(fù)?【2019】獲取2019 .NET 開發(fā)者峰會資料PPT
          回復(fù)?【加群】加入dotnet微信交流群

          ASP.NET Core推薦使用可空引用類型?


          副業(yè)剛需,個(gè)人開發(fā)者如何通過小程序變現(xiàn)?已經(jīng)有朋友變現(xiàn)月入4k了!


          瀏覽 87
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线观看免费拍拍视频 | 小h片免费观看 | 日批免费视频 | 亚洲黄片播放 | 台湾无码一区二区 |