-1

我正在尝试使方法更快。现在,它需要一个object obj并将其转换为具有以下内容的双精度:

double val = Convert.ToDouble(obj);

如果我这样做会更快吗?

double val = double.Parse(obj.ToString());
4

3 回答 3

1

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()).

于 2012-11-12T15:08:06.033 回答
1

Convert.ToDouble()实际上包装了一个double.Parse()电话,所以速度上的差异可以忽略不计。

于 2012-11-12T15:05:33.440 回答
-1

理论上是第一个,因为你正在打一个电话。第二个示例调用 Parse 方法,然后将 ToString 方法的结果传递给它。

话虽如此,请参阅一些关于为什么可能会有更好的解决方案的评论(即如果它失败了怎么办)。

于 2012-11-12T15:07:03.053 回答