我想知道什么是最好的方式(在更安全和简洁的意义上)从一个可空类型转换为另一个“兼容”可空类型。转换十进制?加倍?
具体来说,从十进制转换?加倍?可以使用:
public double? ConvertToNullableDouble(decimal? source)
{
return source.HasValue ? Convert.ToDouble(source) : (double?) null;
}
有没有更好的方法来做到这一点?也许利用标准转换?
我想知道什么是最好的方式(在更安全和简洁的意义上)从一个可空类型转换为另一个“兼容”可空类型。转换十进制?加倍?
具体来说,从十进制转换?加倍?可以使用:
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,内部十进制值的两倍。成功!
测试它,并像一个魅力。谢谢,这就是我正在寻找的东西,但我没有想到内置的演员。 – 2013-05-02 21:33:10
这很奇怪,因为像MUG4N这样的问题似乎很多人都有理论,但实际上没有人试过*。 :) – 2013-05-02 21:35:00
事实上*涉及非空值类型源和目标的所有*转换可能会被“提升为空”。 – 2013-05-03 05:52:23
在一般情况下,如果你想Ø从任何数据类型的其他转换,只要是兼容的,使用此:
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));
...................................
得远一点,如果你想让它更安全,你可以试试看:
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 20下测试的10
是的,这是在类型之间转换的更一般的方式,并不像接受的答案那么简洁。 @Giswin它是否也适用于可空行?我想是这样,但我没有找到[文件]在这个特定的评论(http://msdn.microsoft.com/en-us/library/dtb69x08.aspx)。 – 2013-05-02 21:35:55
你可以使用这个: 十进制? v1 = 222; double? V2 =(double?)Convert.ChangeType(v1,typeof(double)); 但如果v1为null,则Convert.ChangeType将引发异常。然后尝试赶上左边的工作。 – Gisway 2013-05-02 21:51:26
你的方式是一个好方法。 – SimpleVar 2013-05-02 21:12:32
你做得对!检查此参考:http://stackoverflow.com/questions/5487685/conversion-between-nullable-types – MUG4N 2013-05-02 21:20:12