C#中的枚举的Tryparse和IsDefined

时间:2013-02-04 09:31:51

标签: c# .net enums

所有,我要做的是:

确定字符串是否是有效的Enum元素,如果是,则返回状态。

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

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

的内容
Enum_Test evalue;
if(Enum.TryParse(string_Verify, true, out evalue))  
{
        return true;
}

或者我有另一种选择,

if( Enum.IsDefined(typeof(Enum_Test), string_Verify))
{
        return true;
}

上述方法的优势和劣势是什么?

3 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:5)

另外,请注意,如果您将TryParse方法传递给包含数字的字符串,例如, " 123"

答案 2 :(得分:1)

在第一种情况下,如果您的解析成功,那么您将获得evalue中的枚举值。您还将true传递给ignore case参数,因此比较将忽略字符串的大小写。您现在拥有它的方式,它将成功返回true并丢弃evalue中的值。

在第二段代码中,您只是检查是否定义了枚举。