使用Enum.Prase及Enum.TryPrase时的注意事项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Enum.Prase及Enum.TryPrase时的注意事项相关的知识,希望对你有一定的参考价值。

因为一个程序BUG发现的奇怪问题,以前完全不知道要这样写


如果说需要验证一个字符串是否符合一个枚举 


可以用 


(枚举类型)Enum.Parse(typeof(枚举类型),"要验证的信息"); 


可以得到 枚举类型 的 实例,如果不在枚举里就会报错


要验证的信息 可以是 文本,也可以是 数字

比如 

  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" 导入,都没有问题


但是TMD!!!!

如果你导入了 “3”, 这个是不在枚举,但是他不会报错,用 Enum.TryParse 也不会返回false


他会成功转换成 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();
        }
    }


嗯,人生从未有如此酸爽的感觉......

本文出自 “270jia40” 博客,请务必保留此出处http://270jia40.blog.51cto.com/9149400/1745561

以上是关于使用Enum.Prase及Enum.TryPrase时的注意事项的主要内容,如果未能解决你的问题,请参考以下文章

PuTTY使用及密钥认证 XShell使用及密钥认证

FIDDLER的使用方法及技巧总结(连载一)FIDDLER快速入门及使用场景

ModbusPoll及ModbusSlave安装及使用指南

Stanford CoreNLP超简单安装及简单使用,句法分析及依存句法分析

使用聚合函数及F/Q及分组查询

文件系统基础及ext文件系统创建及管理详解文件系统的使用及卸载fstab文件格式及自动挂载系统的