我正在使用 Umbraco CMS,它将大量数据作为字符串保存。
有时我需要将存储值字符串值(这是一个存储为字符串的 int)与枚举进行比较,但最好将它们作为字符串进行比较:
if ( stringValue == ( (int) Enum.Option ).ToString() ){
}
或者解析和比较为整数:
if ( int.Parse(stringValue) == (int) Enum.Option ){
}
还是这两种方式都无关紧要!
我正在使用 Umbraco CMS,它将大量数据作为字符串保存。
有时我需要将存储值字符串值(这是一个存储为字符串的 int)与枚举进行比较,但最好将它们作为字符串进行比较:
if ( stringValue == ( (int) Enum.Option ).ToString() ){
}
或者解析和比较为整数:
if ( int.Parse(stringValue) == (int) Enum.Option ){
}
还是这两种方式都无关紧要!
您应该比较其本机/规范形式的数据。所以使用整数。在这种情况下,性能通常是次要问题。正确性是第一位的。
也许您想尝试使用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"。
如果您将比较枚举,那就更好了。
为了代码的可读性,我会选择第二种方法:毫无疑问,您的字符串在该特定上下文中应该包含一个整数,并且您正在这样对待它。
第二种方法还可以让您更深入地处理错误情况(如果您的字符串不是整数怎么办?第二个块会抛出,第一个块会默默地行动,就像您的数据与枚举不同一样)。
此外,如前所述,比较整数在性能方面总是比比较字符串更好,但我相信在这种情况下不会有太大的实际差异。
从
int
转换到一个enum
非常便宜......它会比字典查找更快。基本上它是无操作的,只是将位复制到具有不同概念类型的位置。将字符串解析为枚举值会慢一些。
从这个 SO 答案。
如果要检查有效性,可以使用
int value;
Option option;
if (int.TryParse(stringValue, out value) &&
Enum.IsDefined(typeof(Option), value)) {
option=(Option)value;
}