2012-05-11 13 views

答えて

8

違いはありません。だから、最後彼らはすべてのコールnew decimal(double)

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

:10進数で

:変換で

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

あなたは、ソースを見れば。

+0

'(小数)値'と '新しい小数点(値)'の間に違いがあるかもしれません:最初のものは組み込みの二重小数変換演算子を呼び出し、小数のコンストラクタのオーバーロードを呼び出します。確かに、ネイティブコードはおそらく同じですが、ILはおそらく異なっており、C#のセマンティクスは確かに異なります。 – phoog

+2

@phoog 2つの間に違いはありません。 「組み込みの」二進数から十進への変換演算子はありません。答えに提供される最初のメソッドは、呼び出されるメソッドです。あなたが提供した最初の方法は、コールツリーの1つのメソッドを提供する2番目の方法を呼び出します。 – JKor

+0

@ JKか何も提供していませんでした。私はただコメントしています。 – phoog

4

これらはすべて同じ結果を達成します。

  • が明示的にdecimalを入力しmyDoubleをキャスト新しい変数を作成します。方法1:ただし、ここではより多くの分解説明があります。キャストするとき、"このタイプAのオブジェクトは実際にはB型由来のオブジェクトであるか、キャスト演算子はAからBにキャストするために存在します。

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

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

状態:

  • 変換方法は、他の全てのベース・タイプにすべての基本型を変換するために存在します。ただし、実行される実際の変換操作は、次の3つのカテゴリに分類されます。

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

  • 意味のある結果を得られない変換は、InvalidCastExceptionをスローします。実際には変換は行われません。 CharからBoolean、Single、Double、Decimal、DateTime、およびそれらの型からCharへの変換で例外がスローされます。 DateTimeからStringを除く任意の型への変換、およびString以外の型からDateTimeへの変換では、例外がスローされます。 上記以外の基本タイプは、他の基本タイプとの間で変換することができます。
+0

例2は、コンストラクタのオーバーロードを示しています。また、例1のキャスト例は、あなたの定義に従ったキャストではありません。なぜなら、もちろん10進数はdoubleから派生していないからです(逆もありません)。むしろ、C#キャスト演算子には、(1)参照型の表現保存型のキャスト、および(2)組み込みまたはユーザー定義の明示的(または暗黙的)変換を呼び出すという2つの関数があります。 – phoog

3

実際には、機能的には違いはありません。 これらは異なる方法です同じ結果を達成します。

Convert.ToDecimalの場合は、IFormatProvider(カルチャ)という形式を指定する可能性があるので、より柔軟性があります。

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

+1

ここでは、入力も出力も文字列ではないので、IFormatProviderはここでは無視されるとします。 – phoog

+0

はい、正しく入力してください。注釈は一般的な可能な使用の違いに関するものでした – Tigran