我的应用程序使用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
的又一票,其中带有一些数字来支持它。