我尝试使用以下代码
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时会有什么不同?
答案 0 :(得分:3)
原因是,您无法将null
分配给double
,而您的三元表达式会返回double
,而不是double?
。由于null
没有隐式类型,因此三元表达式的返回类型由部件确定,具有隐式类型,即返回{{1}的部分}。由于d
是d
,因此您的整个三元表达式的结果是返回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;