1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        踩坑了,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

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

        Reference

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






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

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久草视频免费在线观看 | 一本一道无码中文字幕精品热 | 麻妃视频 | 好紧骨科忍不了h | 日本操逼免费视频 | 国产精品久久久一区二区三区网站 | 新婚少妇芷云呻吟嗯啊哦迎合 | 午夜精品福利在线 | 韩国《甜性涩爱》在线观看 | 国产美女被强躁到呻吟红视频 |