13

もしあれば、違いは何ですか?

decimal d = (decimal) myDouble;
decimal d = new decimal(myDouble);
decimal d = Convert.ToDecimal(myDouble);
4

3 に答える 3

10

違いはありません。ソースを見ると:

10進数:

public static explicit operator decimal(double value)
{
    return new decimal(value);
}    

変換中:

public static decimal ToDecimal(float value)
{
    return (decimal) value;
}

したがって、最終的にはすべてが呼び出しますnew decimal(double)

于 2012-05-11T14:39:54.737 に答える
5

それらはすべて同じ結果を達成します。ただし、ここにもっと詳細な説明があります:

  • メソッド1myDoubleは、タイプに明示的にキャストする新しい変数を作成しますdecimalキャストすると、 「このタイプAのオブジェクトは、実際にはタイプBから派生したオブジェクトであるか、AをBにキャストするためのキャスト演算子が存在します」と言っています。

  • 方法2は、コンストラクターのオーバーロードを介してmyDouble適切な型( )に変換する新しい変数を作成します。decimalコンストラクターを呼び出すと、「コンストラクターに渡された引数に基づいて新しいオブジェクトを作成する」ということです。

  • 方法3は、基本データ型(double)を別の基本データ型()に変換しdecimalます。のようなものを使用するConvert.ToDecimal()と、「このオブジェクトはタイプBではありませんが、タイプBのオブジェクトにする方法があります」と言っています。

ConvertMSDNの状態について:

  • すべての基本タイプを他のすべての基本タイプに変換するための変換方法があります。ただし、実行される実際の変換操作は、次の3つのカテゴリに分類されます。

  • タイプからそれ自体への変換は、単にそのタイプを返します。実際には変換は行われません。

  • 意味のある結果を生成できない変換は、InvalidCastExceptionをスローします。実際には変換は行われません。Charからブール、Single、Double、Decimal、またはDateTimeへの変換、およびこれらのタイプからCharへの変換では、例外がスローされます。DateTimeからStringを除くすべての型への変換、およびStringを除くすべての型からDateTimeへの変換に対して、例外がスローされます。上記以外の基本タイプは、他の基本タイプとの間で変換できます。
于 2012-05-11T14:37:49.367 に答える
3

実際には、機能的な観点からは違いはありません。これらは、同じ結果を達成するためのさまざまな方法です。

Convert.ToDecimalの場合、フォーマットIFormatProvider(culture)を指定できるため、柔軟性が向上することを明記することが重要です。

多文化環境を気にしない場合は、好きなものを選んでください。

于 2012-05-11T14:38:04.780 に答える