确定enumeration-vs-number的最便宜的.net方式是什么?

时间:2014-05-29 17:43:58

标签: c# .net enums string-parsing

我正在尝试确定给定字符串是否为枚举值。字符串应该是十进制值,这是很常见的。我的问题是,对字符串执行Enum.TryParse()或执行正则表达式检查它是十进制值还是执行Int32.TryParse()是否需要更长时间。如果字符串不是数字(无符号)十进制值,则很可能(但不是100%保证)该字符串是枚举值。

这项检查多次进行。我想获得最低的平均成本。

2 个答案:

答案 0 :(得分:1)

您应该对代码进行分析,以确定这是否确实存在问题。如果没有,只要做任何事情都会给你最清晰,简洁(工作)的代码。如果这是一个问题,这可能是选择使用哪种方法的好方法:

bool probablyANumber = char.IsDigit(myStr[0]);

这应该可以正常使用,因为枚举不能以数字开头,而数字通常会这样(有"-1"" 1 "等例外)。这是改进还是只是让事情变得更糟,取决于你的数据集。

值得注意的是enum can be parsed来自数字,因此Enum.TryParse的行为可能不是您所期望的。

enum MyEnum
{
    Zero,
    One,
    Two,
    Ten = 10
}

MyEnum e;
Enum.TryParse<MyEnum>("10", out e);
// success; e == MyEnum.Ten

MyEnum e;
Enum.TryParse<MyEnum>("11", out e);
// success; e == (MyEnum)11

答案 1 :(得分:0)

最快?将字符串值放在HashSet中。 HashSet.Contains()