あるnull許容型から別の「互換性のある」null許容型に変換するための(より安全で簡潔な意味での)最良の方法は何でしょうか。
具体的には、10進数から変換しますか?倍増する?以下を使用して実行できます。
public double? ConvertToNullableDouble(decimal? source)
{
return source.HasValue ? Convert.ToDouble(source) : (double?) null;
}
これを行うためのより良い方法はありますか?たぶん、標準の変換を活用しますか?
勝利のための作り付けのキャスト! VS2012でこれをテストしましたおよび VS2010:
decimal? numberDecimal = new Decimal(5);
decimal? nullDecimal = null;
double? numberDouble = (double?)numberDecimal; // = 5.0
double? nullDouble = (double?)nullDecimal; // = null
明示的なキャストを使用するだけで、nullがnullにキャストされ、内部の10進値がdoubleにキャストされます。成功!
一般に、互換性がある限り、任意のデータ型から別のデータ型に変換する場合は、次を使用します。
Convert.ChangeType(your variable, typeof(datatype you want convert to));
例えば:
string str= "123";
int value1 = (int)Convert.ChangeType(str, typeof(int));
float? value2 = (float?)Convert.ChangeType(str, typeof(float));
...................................
さらに少し安全にしたい場合は、trycatchを追加できます。
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
}
これはVS2010でテストされています