我的应用程序使用VSTO读取Excel文件,并将读取的数据添加到StringDictionary中。它仅添加数位数的数据(1000 1000,2 1000,34-逗号是俄语标准中的定界符)。

有什么更好的方法来检查当前字符串是否合适?

object data, string key; // data had read

try
{
  Convert.ToDouble(regionData, CultureInfo.CurrentCulture);
  dic.Add(key, regionData.ToString());
}
catch (InvalidCastException)
{
  // is not a number
}

要么
double d;
string str = data.ToString();
if (Double.TryParse(str, out d)) // if done, then is a number
{
  dic.Add(key, str);
}

由于以下解析算法问题,我必须使用StringDictionary而不是Dictionary<string, double>

我的问题:哪种方法更快?哪个更安全?

调用Convert.ToDouble(object)Convert.ToDouble(string)更好吗?

最佳答案

我在 Release模式下进行了快速的非科学测试。我在这两种方法中都使用了两个输入:“2.34523”和“badinput”,并迭代了1,000,000次。

有效输入:

Double.TryParse = 646ms
Convert.ToDouble = 662 ms

与预期的相差无几。出于所有意图和目的,对于有效输入,这些都是相同的。

输入无效:
Double.TryParse = 612ms
Convert.ToDouble = ..

好吧..它运行了很长时间。我使用1,000次迭代重新运行了整个过程,而Convert.ToDouble的错误输入花费了8.3秒的时间。平均下来,将需要2多个小时。我不在乎测试的基础程度如何,在无效输入的情况下,Convert.ToDouble的异常引发会破坏您的性能。

因此,这是对TryParse的又一票,其中带有一些数字来支持它。

09-25 17:48
查看更多