我正在尝试使方法更快。现在,它需要一个object obj
并将其转换为具有以下内容的双精度:
double val = Convert.ToDouble(obj);
如果我这样做会更快吗?
double val = double.Parse(obj.ToString());
我正在尝试使方法更快。现在,它需要一个object obj
并将其转换为具有以下内容的双精度:
double val = Convert.ToDouble(obj);
如果我这样做会更快吗?
double val = double.Parse(obj.ToString());
Forstring
Convert.ToDouble
只是检查值,如果是则null
返回0.0
。然后它真的调用double.Parse
:
[__DynamicallyInvokable]
public static double ToDouble(object value)
{
if (value != null)
return ((IConvertible) value).ToDouble((IFormatProvider) null);
else
return 0.0;
}
// common implementation of IConvertable
double IConvertible.ToDouble(IFormatProvider provider)
{
return Convert.ToDouble(this, provider);
}
// implementation for string
[__DynamicallyInvokable]
public static double ToDouble(string value, IFormatProvider provider)
{
if (value == null)
return 0.0;
else
return double.Parse(value, NumberStyles.Float | NumberStyles.AllowThousands, provider);
}
// and for long. differs, right?
[__DynamicallyInvokable]
public static double ToDouble(long value)
{
return (double) value;
}
所以我认为double.Parse
非数字类型的速度不会快得多。但是当你真的不知道你的论点是那种类型时,最好调用Convert.ToDouble(value)
而不是double.Parse(value.ToString())
.
Convert.ToDouble()
实际上包装了一个double.Parse()
电话,所以速度上的差异可以忽略不计。
理论上是第一个,因为你正在打一个电话。第二个示例调用 Parse 方法,然后将 ToString 方法的结果传递给它。
话虽如此,请参阅一些关于为什么可能会有更好的解决方案的评论(即如果它失败了怎么办)。