由於一個程序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是這樣解釋的
因此,上面那段代碼正確的寫法是
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(); } }
嗯,人生從未有如此酸爽的感受......