Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.net中,什么是最便宜的方法来确定枚举与数量?_C#_.net_Enums_String Parsing - Fatal编程技术网

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不是问题,获取字符串已经比转换它要昂贵得多。优化它不会使操作明显加快。