我正在尝试确定给定字符串是否为枚举值。字符串应该是十进制值,这是很常见的。我的问题是,对字符串执行Enum.TryParse()
或执行正则表达式检查它是十进制值还是执行Int32.TryParse()
是否需要更长时间。如果字符串不是数字(无符号)十进制值,则很可能(但不是100%保证)该字符串是枚举值。
这项检查多次进行。我想获得最低的平均成本。
答案 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()