【发布时间】:2010-10-09 20:13:51
【问题描述】:
我的应用程序使用 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) 更好?
【问题讨论】:
-
仅供参考,double.TryParse 与 try { result = double.Parse(s); 相同。返回真; } 捕捉 { 返回错误; }。 Convert 本质上是一个包含一堆重载的包装器。你怎么做没有区别。但正如 Jon 所指出的,请考虑如何处理错误的输入。
-
Double.TryParse 与包裹在 try..catch 中的 double.Parse 不同。语义相同,但代码路径不同。 TryParse 首先使用内部 Number.TryStringToNumber 验证字符串是否为数字,而 Parse 假定它已经是数字/双精度数。