所有,我要做的是:
确定字符串是否是有效的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;
}
上述方法的优势和劣势是什么?
答案 0 :(得分:8)
第一种方法的好处:它不区分大小写:如果你得到blue
,并且有一个枚举成员Blue
,那么一切都会好的。
第二种方法的优点:它是自我记录的:你真的不想解析,你想检查是否有枚举值使用给定名称定义。因此,在第二种情况下,方法的名称更符合您的意图。
也就是说,如果你想要两个优点,请使用第一种方法并将其封装到一个命名良好的方法中(例如IsEnumDefinedIgnoreCase
)。
答案 1 :(得分:5)
另外,请注意,如果您将TryParse方法传递给包含数字的字符串,例如, " 123"
答案 2 :(得分:1)
在第一种情况下,如果您的解析成功,那么您将获得evalue
中的枚举值。您还将true
传递给ignore case参数,因此比较将忽略字符串的大小写。您现在拥有它的方式,它将成功返回true
并丢弃evalue
中的值。
在第二段代码中,您只是检查是否定义了枚举。