C#中的枚举的Tryparse和IsDefined

now*_*ed. 3 .net c# enums

所有,我要做的是:

找出字符串是否是有效的Enum元素,如果是,则返回状态.

类似的东西,如果我有一个枚举说Enum_Test,它又由红色,蓝色,绿色组成.

现在,如果蓝色是要验证的元素,我会使用类似的东西

Enum_Test evalue;
if(Enum.TryParse(string_Verify, true, out evalue))  
{
        return true;
}
Run Code Online (Sandbox Code Playgroud)

或者我有另一种选择,

if( Enum.IsDefined(typeof(Enum_Test), string_Verify))
{
        return true;
}
Run Code Online (Sandbox Code Playgroud)

上述方法的优点和缺点是什么?

Hei*_*nzi 9

第一种方法的优点:它不区分大小写:如果你得到blue,并且有一个枚举成员Blue,一切都会好的.

第二种方法的优点:它是自我记录的:你真的不想解析,你想检查是否有一个用给定名称定义的枚举值.因此,在第二种情况下,方法的名称更符合您的意图.

也就是说,如果你想要两个优点,请使用第一种方法并将其封装到一个命名良好的方法中(例如IsEnumDefinedIgnoreCase).


小智 7

另外,请注意,如果您传递一个包含数字的字符串,例如"123",TryParse方法将返回true.