C# 在.net中,什么是最便宜的方法来确定枚举与数量?
我试图确定给定的字符串是否是枚举值。字符串应该是十进制值是很常见的。我的问题是,对字符串执行C# 在.net中,什么是最便宜的方法来确定枚举与数量?,c#,.net,enums,string-parsing,C#,.net,Enums,String Parsing,我试图确定给定的字符串是否是枚举值。字符串应该是十进制值是很常见的。我的问题是,对字符串执行Enum.TryParse(),还是执行正则表达式检查它是否为十进制值,或者执行Int32.TryParse(),需要更长的时间。如果字符串不是数字(无符号)十进制值,则该字符串很可能是枚举值,但不能100%保证 这张支票做了很多次。我希望获得最低的平均成本。您应该分析您的代码,以确定这是否确实是一个问题。如果没有,就做任何能给你提供最清晰、简洁(有效)代码的事情。如果是问题,这可能是选择使用哪种方法的好
Enum.TryParse()
,还是执行正则表达式检查它是否为十进制值,或者执行Int32.TryParse()
,需要更长的时间。如果字符串不是数字(无符号)十进制值,则该字符串很可能是枚举值,但不能100%保证
这张支票做了很多次。我希望获得最低的平均成本。您应该分析您的代码,以确定这是否确实是一个问题。如果没有,就做任何能给你提供最清晰、简洁(有效)代码的事情。如果是问题,这可能是选择使用哪种方法的好方法:
bool probablyANumber = char.IsDigit(myStr[0]);
这应该可以很好地工作,因为枚举不能以数字开头,而数字通常可以(例外情况是“-1”和“1”
)。这是一种改进还是只会让事情变得更糟取决于您的数据集
值得注意的是,enum
s来自数字,因此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
enum MyEnum
{
零
一
二
十=十
}
髓鞘e;
枚举锥虫属(“10”,出e);
//成功;e==MyEnum.10
髓鞘e;
锥虫计数(“11”,e);
//成功;e==(MyEnum)11
最快的?将字符串值放入哈希集中。HashSet.Contains()Regex在CPU时间上非常昂贵编写一些基准测试,请参见:-)我最初的猜测是,检查第一个字符是否是字符将是预测值是否可能是枚举的最快方法。您的意思并不清楚-enum.TryParse
也将成功地处理数值。如果你能给出一个具体的例子,包括示例输入和预期输出,这将非常有帮助。你自己运行基准测试会更好。这里没有人知道您的数据集、循环细微差别或其他独特情况。字符串用于人,整数和枚举用于计算机。在通过I/O或用户界面获得字符串后,必须对其进行转换。在这一点上,perf不是问题,获取字符串已经比转换它要昂贵得多。优化它不会使操作明显加快。