C#第三级if运算符给出了可为null的double问题
本文关键字:null double 问题 if 第三级 运算符 | 更新日期: 2023-09-27 18:25:42
我有一个可以为null的双
MyNullableDouble = MyDouble == 0 ? null : MyDouble;
这给我带来了一个问题:
无法确定条件表达式的类型,因为"answers"double"之间没有隐式转换
您应该强制转换Mydouble
,否则在左侧您有类型double?
,而在右侧您有double
,因此类型不等价(这正是异常所说的):
MyNullableDouble = MyDouble == 0 ? null : (double?)MyDouble;
是的,不能这样做,两个值应该是相同的数据类型。使用第三级的任何特定原因。。使用if else。。。
您可以实现一种通用方法来处理这种情况。由于所有Nullable类型都有GetValueOrDefault
方法,因此可以为非Nullable结构编写一个相反的方法:
public static T? GetNullIfDefault<T>(this T value)
where T: struct
{
if( value.Equals(default(T)))
{
return null;
}
return value;
}
用法示例:
MyNullableDouble = MyDouble.GetNullIfDefault();