<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)換要小心!

          共 1774字,需瀏覽 4分鐘

           ·

          2023-09-29 21:15


          小心 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é)果如下:

          3cdf7343a6c185ef385bcab2096eea75.webp

          從上面的結(jié)果看得出來,從 int 值直接做轉(zhuǎn)換的時候,結(jié)果可能并不是期望的,不會拋異常,那么又該如何處理呢?我們再來看一個示例

          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é)果吧:

          fcff2cc48dd76c8c61c03d3e314d63ce.webp

          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






          01fb51757e4019ed0ef6c14cb633022a.webp
          回復(fù)   【關(guān)閉】 學(xué)永久關(guān)閉App開屏廣告 回復(fù) 【刪除】學(xué)自動檢測那個微信好友刪除、拉黑 回復(fù)   【手冊】 獲取3萬字.NET、C#工程師面試手冊 回復(fù) 【幫助】獲取100+個常用的C#幫助類庫 回復(fù) 【加群】加入DotNet學(xué)習(xí)交流群
          瀏覽 99
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  日韩大逼 | ijⅰjzzijⅰjzz日本 | 欧美操逼视频免费 | 欧美性爱视频一区二区三区 | 精品蜜桃秘 一区二区三区毛茸茸 |