4

我正在使用 Umbraco CMS,它将大量数据作为字符串保存。

有时我需要将存储值字符串值(这是一个存储为字符串的 int)与枚举进行比较,但最好将它们作为字符串进行比较:

if ( stringValue == ( (int) Enum.Option ).ToString() ){
}

或者解析和比较为整数:

if ( int.Parse(stringValue) == (int) Enum.Option ){
}

还是这两种方式都无关紧要!

4

6 回答 6

4

您应该比较其本机/规范形式的数据。所以使用整数。在这种情况下,性能通常是次要问题。正确性是第一位的。

于 2012-07-30T11:11:09.693 回答
3

也许您想尝试使用Enum.Parse

enum MyEnum
{ 
  Option,
  Option1 = 1, 
  Option2 = 2
}

string stringValue = "0";
if((MyEnum)Enum.Parse(typeof(MyEnum), stringValue) == MyEnum.Option)
{
   //Do what you need
}

笔记:

value 参数包含枚举成员的基础值或命名常量的字符串表示形式,或由逗号 (,) 分隔的命名常量列表。

所以stringValue可以是"Option""0"

于 2012-07-30T11:15:43.093 回答
0

如果您将比较枚举,那就更好了。

于 2012-07-30T11:15:18.250 回答
0

为了代码的可读性,我会选择第二种方法:毫无疑问,您的字符串在该特定上下文中应该包含一个整数,并且您正在这样对待它。

第二种方法还可以让您更深入地处理错误情况(如果您的字符串不是整数怎么办?第二个块会抛出,第一个块会默默地行动,就像您的数据与枚举不同一样)。

此外,如前所述,比较整数在性能方面总是比比较字符串更好,但我相信在这种情况下不会有太大的实际差异。

于 2012-07-30T11:16:06.337 回答
0

int转换到一个enum非常便宜......它会比字典查找更快。基本上它是无操作的,只是将位复制到具有不同概念类型的位置。

将字符串解析为枚举值会慢一些。

这个 SO 答案

于 2012-07-30T11:17:16.803 回答
0

如果要检查有效性,可以使用

int value;
Option option;


if (int.TryParse(stringValue, out value) &&
    Enum.IsDefined(typeof(Option), value)) { 
    option=(Option)value;
}
于 2012-07-30T11:17:28.143 回答