4

我所要做的就是:

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

例如,如果我有一个枚举,说 Enum_Test 依次由 red、blue、green 作为其值。

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

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

否则我有另一个选择,

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

以上方法有什么优势和坑?

4

3 回答 3

11

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

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

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

于 2013-02-04T09:36:43.017 回答
8

另外,请注意,如果您向 TryParse 方法传递一个包含数字的字符串,例如“123”,则该方法将返回 true。

于 2015-07-27T07:18:57.183 回答
1

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

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

于 2013-02-04T09:35:47.040 回答