我正在使用Umbraco CMS,它将大量数据保存为字符串。
有时我需要将存储值字符串值(存储为字符串的int)与枚举进行比较,但最好将它们作为字符串进行比较:
if ( stringValue == ( (int) Enum.Option ).ToString() ){
}
或以整数形式解析和比较:
if ( int.Parse(stringValue) == (int) Enum.Option ){
}
或者两种方式无关紧要!
答案 0 :(得分:4)
您应该以原生/规范形式比较数据。所以使用整数。在这种情况下,性能通常是二阶关注。正确是第一位的。
答案 1 :(得分: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
可以是“选项”或“0”。
答案 2 :(得分:0)
如果你比较枚举它会更好。
答案 3 :(得分:0)
为了代码可读性,我选择了第二种方法:它毫无疑问地表明你的字符串在该特定的上下文中包含一个整数,并且你正在对它进行处理。
第二种方法还允许你更深入地处理错误情况(如果你的字符串不是一个整数怎么办?第二个块会抛出,第一个会默默地行动就像你的数据不同于enum)。
另外,正如已经说过的,比较整数总是比比较字符串更好,但我相信在这种情况下不会有太多的现实差异。
答案 4 :(得分:0)
从
int
投射到enum
非常便宜......它比字典查找更快。基本上它是一个无操作,只是将位复制到具有不同名义类型的位置。将字符串解析为枚举值会稍慢。
答案 5 :(得分:0)
如果要检查有效性,可以使用
int value;
Option option;
if (int.TryParse(stringValue, out value) &&
Enum.IsDefined(typeof(Option), value)) {
option=(Option)value;
}