zoukankan      html  css  js  c++  java
  • 关于 Enum.TryParse 方法的一个小坑…

    今天在测试导入数据的时候,突然发现本应该是枚举内容的数据,导入了进了一个很大的不在枚举定义内的数字。

    记得当时用的是 Enum.TryParse 方法对导入的文本进行校验的,于是调试了一下,发现果然是它的问题…

    public enum Gender
    {
        保密 = 0,
        男 = 1,
        女 = 2,
        其他 = 3
    }
    
    static void Main(string[] args)
    {
        Gender gender;
    
        // 虽然 199 不在枚举定义中,但此转换是成功的!!!
        if (Enum.TryParse("199", out gender))
        {
            // 需要通过此方法再次确定是否是枚举实际定义的内容
            if (Enum.IsDefined(typeof(Gender), gender))
            {
                Console.WriteLine(gender.ToString());
            }
            else
            {
                Console.WriteLine("非枚举成员");
            }
    
        }
        else
        {
            Console.WriteLine("转换失败");
        }
    
        Console.ReadKey();
    }

    如上面代码所示,要加上 IsDefined 的判断,才能真正的完成校验。

    其实关于这个功能,MSDN 的文档中是有写的:https://msdn.microsoft.com/zh-cn/library/dd783499(v=vs.110).aspx

    如果 value 是不对应的一个命名常量的名称 TEnum, ,该方法返回 false。 如果 value 是一个整数,它不表示的基础值的字符串表示 TEnum 枚举,该方法返回一个枚举成员,其基础值为 value 转换为整数类型。 如果不需要此行为,则调用 IsDefined 方法,以确保特定字符串的整数表示形式是实际的成员 TEnum。

    好吧,只能怪自己不认真看书了~

  • 相关阅读:
    二维数组和最大字数组求取 2
    spring冲刺第七天
    spring冲刺第六天
    寻找水王
    spring冲刺第五天
    spring冲刺第四天
    spring冲刺第三天
    spring冲刺第二天
    大道至简读书笔记3
    spring冲刺第一天
  • 原文地址:https://www.cnblogs.com/xwgli/p/5945035.html
Copyright © 2011-2022 走看看