转换小数?加倍?

时间:2013-05-02 21:06:18

标签: c# nullable

我想知道从一个可空类型转换为另一个“兼容”可空类型的最佳方式(在更安全和简洁的意义上)是什么。

具体来说,从小数转换?加倍?可以使用:

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

有没有更好的方法呢?也许利用标准转换?

2 个答案:

答案 0 :(得分:27)

内置演员阵容以赢取胜利!刚刚在VS2012 VS2010中进行了测试:

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

只使用显式强制转换会将null转换为null,并将内部十进制值转换为double。成功了!

答案 1 :(得分:1)

一般情况下,如果您希望从任何数据类型转换为另一种数据类型,只要它们兼容,请使用:

    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));
    ...................................

再远一点,如果你想让它更安全,你可以添加一个try catch:

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
}

这是在VS 2010下测试的