2013-05-02 9 views
12

1つのnull可能な型から別の互換性のあるnull可能な型に変換するための最良の方法(より安全で簡潔な意味で)が何であるか疑問に思っています。10進数を変換しますか?倍にする?

具体的には、倍にする?

public double? ConvertToNullableDouble(decimal? source) 
{ 
    return source.HasValue ? Convert.ToDouble(source) : (double?) null; 
} 

これを行うには良い方法がありますか?標準の変換を利用しているのでしょうか?

+0

あなたの方法は良い方法です。 – SimpleVar

+1

あなたはそれを正しくやっています!このリファレンスもチェックしてください:http://stackoverflow.com/questions/5487685/conversion-between-nullable-types – MUG4N

答えて

22

勝利のためのキャストに組み込まれています!ただ、VS2012 VS2010でこれをテストした:

decimal? numberDecimal = new Decimal(5); 
decimal? nullDecimal = null; 
double? numberDouble = (double?)numberDecimal; // = 5.0 
double? nullDouble = (double?)nullDecimal;  // = null 

ただ、nullにnullをキャストします明示的なキャスト、および倍増する内部10進値を使用して。成功!一般的に

+0

テスト済みで、魅力的です。ありがとう、これは私が探していたものでしたが、私は組み込みのキャストは考えていませんでした。 –

+0

それにリンクされた1つのMUG4Nのような質問には、多くの人が理論を持っているようですが、実際には誰も試していない*ので、それは奇妙です。 :) –

+2

実際に、nullと入力できない値の型のソースとターゲットを含む*すべての*変換は、「nullableに持ち上げられる」可能性があります。 –

1

、あなたがいる限り、彼らは互換性があるように、他の任意のデータ型からOの変換をしたい場合は、この使用します。さらに

string str= "123"; 
    int value1 = (int)Convert.ChangeType(str, typeof(int)); 
    float? value2 = (float?)Convert.ChangeType(str, typeof(float)); 
    ................................... 

少し:例えば

Convert.ChangeType(your variable, typeof(datatype you want convert to)); 

string str= "123"; 
try 
{ 
    int value1 = (int)Convert.ChangeType(str, typeof(int)); 
    int? value2 = (int?)Convert.ChangeType(str, typeof(int)); 
    float value3 = (float)Convert.ChangeType(str, typeof(float)); 
    float? value4 = (float?)Convert.ChangeType(str, typeof(float)); 
} 
catch(Exception ex) 
{ 
    // do nothing, or assign a default value 
} 

これはVS20でテストされています10

+0

はい、これは、受け入れられた回答ほど簡潔ではなく、タイプ間で変換するより一般的な方法です。 @Giswinそれはnullablesのためにも機能しますか?私は想像していますが、[documentation](http://msdn.microsoft.com/en-us/library/dtb69x08.aspx)にこれに関する具体的なコメントはありません。 –

+0

あなたはこれを使用できます: 10進数? v1 = 222; 倍? V2 =(double?)Convert.ChangeType(v1、typeof(double)); v1がnullの場合、Convert.ChangeTypeは例外をスローします。試してみると、左の仕事にキャッチされます。 – Gisway