-1

メソッドを高速化しようとしています。今のところ、それはを取り、それをobject obj次のようにdoubleに変換します:

double val = Convert.ToDouble(obj);

これをやったらもっと速くなるでしょうか?

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

3 に答える 3

1

Convert.ToDouble()実際にはdouble.Parse()通話をラップするため、速度の違いはごくわずかです。

于 2012-11-12T15:05:33.440 に答える
1

string 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

理論的には、最初は1回の呼び出しです。2番目の例では、Parseメソッドを呼び出して、ToStringメソッドの結果を渡します。

そうは言っても、なぜもっと良い解決策があるのか​​(つまり、失敗した場合はどうなるのか)についてのコメントのいくつかを参照してください。

于 2012-11-12T15:07:03.053 に答える