C#ternary如果运算符给出了可空的双重问题

时间:2013-07-31 09:32:25

标签: c# if-statement operators nullable

我有一个可以为空的双重

MyNullableDouble = MyDouble == 0 ? null : MyDouble;

这给我带来了一个问题:

  

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

3 个答案:

答案 0 :(得分:5)

你应该投射Mydouble,否则在左侧你有double?类型,而在右边你有double,所以类型不等同(这正是异常的例外)在说):

MyNullableDouble = MyDouble == 0 ? null : (double?)MyDouble;

答案 1 :(得分:0)

是的,你不能这样做,这两个值都应该是相同的数据类型。任何特定的理由使用third..use if else ...

答案 2 :(得分:0)

您可以实施通用方法来处理此类情况。 由于所有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();