分配“双?”使用“?”操作员不可能?

时间:2011-08-16 11:15:52

标签: c#

我尝试使用以下代码

double d;
double? a = double.TryParse("3.14", out d) ? d : null;

但它不会编译为“double和null之间没有隐式转换”。按照以下方式拆分上面的代码有效:

        double d;
        double? a;
        if ( double.TryParse("3.14", out d))
            a = d;
        else
            a = null;

使用?-operator时会有什么不同?

5 个答案:

答案 0 :(得分:3)

原因是,您无法将null分配给double,而您的三元表达式会返回double,而不是double?。由于null没有隐式类型,因此三元表达式的返回类型由部件确定,具有隐式类型,即返回{{1}的部分}。由于dd,因此您的整个三元表达式的结果是返回double

通过将其中一个回复转换为double来修复它,例如

double?

答案 1 :(得分:2)

您可以在空合并运算符的右侧将null强制转换为double?,以向编译器指示所需的返回类型:

double? a = double.TryParse("3.14", out d) ? d : (double?)null;

答案 2 :(得分:1)

以下内容应该有效,您可以显式地转换null

double? a = double.TryParse("3.14", out d) ? d : (double?)null;

答案 3 :(得分:0)

这是因为null必须可以转换为d的类型(在这种情况下为double)以及

的类型

答案 4 :(得分:0)

您必须将d投射到double?

尝试a = double.TryParse("3.14", out d) ? (double?) d : null;