使用Enum.Prase及Enum.TryPrase時的注意事項

由於一個程序BUG發現的奇怪問題,之前徹底不知道要這樣寫c#


若是說須要驗證一個字符串是否符合一個枚舉 ide


能夠用 spa


(枚舉類型)Enum.Parse(typeof(枚舉類型),"要驗證的信息"); 3d


能夠獲得 枚舉類型 的 實例,若是不在枚舉裏就會報錯blog


要驗證的信息 能夠是 文本,也能夠是 數字字符串

好比 get

  enum 銷售類型
    {
        A型 = 1,
        B型 = 2
    }

    class Program
    {
        static void Main(string[] args)
        {
            銷售類型 a = (銷售類型)Enum.Parse(typeof(銷售類型), "A型");
            Console.WriteLine("{0} value is {1}", a.ToString(), (int)a);

            銷售類型 b = (銷售類型)Enum.Parse(typeof(銷售類型), "2");
            Console.WriteLine("{0} value is {1}", b.ToString(), (int)b);

            銷售類型 c = (銷售類型)Enum.Parse(typeof(銷售類型), "3");
            Console.WriteLine("{0} value is {1}", c.ToString(), (int)c);
            
            Console.ReadKey();
        }
    }



你能夠把 "A型" 或者 "2" 導入,都沒有問題string


可是TMD!!!!it

若是你導入了 「3」, 這個是不在枚舉,可是他不會報錯,用 Enum.TryParse 也不會返回falseio


他會成功轉換成 3 給你。。。。。。。。。臥槽 


MSDN是這樣解釋的


wKioL1bRWZCCPpsmAAErgcxYkbo609.png

因此,上面那段代碼正確的寫法是

 enum 銷售類型
    {
        A型 = 1,
        B型 = 2
    }

    class Program
    {
        static void Main(string[] args)
        {
            銷售類型 a = (銷售類型)Enum.Parse(typeof(銷售類型), "A型");
            Console.WriteLine("{0} value is {1}", a.ToString(), (int)a);

            銷售類型 b = (銷售類型)Enum.Parse(typeof(銷售類型), "2");
            Console.WriteLine("{0} value is {1}", b.ToString(), (int)b);

            銷售類型 c = (銷售類型)Enum.Parse(typeof(銷售類型), "3");
            if (Enum.IsDefined(typeof(銷售類型), c))
            {
                Console.WriteLine("{0} value is {1}", c.ToString(), (int)c);
            }
            else
            {
                Console.WriteLine("{0} is not an underlying value of the enumeration.", c.ToString());
            }

            Console.ReadKey();
        }
    }


嗯,人生從未有如此酸爽的感受......

相關文章
相關標籤/搜索