在C#中将字符串与int进行比较

时间:2012-07-30 11:08:14

标签: c# string performance comparison int

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

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

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

或以整数形式解析和比较:

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

或者两种方式无关紧要!

6 个答案:

答案 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非常便宜......它比字典查找更快。基本上它是一个无操作,只是将位复制到具有不同名义类型的位置。

     

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

来自this SO answer

答案 5 :(得分:0)

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

int value;
Option option;


if (int.TryParse(stringValue, out value) &&
    Enum.IsDefined(typeof(Option), value)) { 
    option=(Option)value;
}