C#第三级if运算符给出了可为null的double问题

本文关键字:null double 问题 if 第三级 运算符 | 更新日期: 2023-09-27 18:25:42

我有一个可以为null的双

MyNullableDouble = MyDouble == 0 ? null : MyDouble;

这给我带来了一个问题:

无法确定条件表达式的类型,因为"answers"double"之间没有隐式转换

C#第三级if运算符给出了可为null的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();