繁体   English   中英

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

[英]In C# comparing strings to ints

我正在使用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”

如果你比较枚举它会更好。

为了代码可读性,我选择了第二种方法:它毫无疑问地表明你的字符串应该在该特定的上下文中包含一个整数,并且你正在对它进行处理。

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

此外,正如已经说过的,比较整数总是比比较字符串更好的性能,但我相信在这种情况下不会有太多的现实差异。

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

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

这个SO答案

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

int value;
Option option;


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM