赋值“double”?使用“?“不可能操作
本文关键字:操作 不可能操作 不可能 使用 赋值 double | 更新日期: 2023-09-27 18:05:48
我尝试使用以下代码
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;
原因是,您不能将null
分配给double
,并且您的三元表达式返回double
,而不是double?
。因为null
没有隐式类型,所以三元表达式的返回类型由具有隐式类型的部分决定,即返回d
的部分。由于d
是double
,因此整个三元表达式的计算结果为返回double
。
通过将其中一个返回值强制转换为double?
来修复它,例如
double d;
double? a = double.TryParse("3.14", out d) ? (double?)d : null;
您可以在空合并操作符的右侧将null
转换为double?
,以向编译器指示所需的返回类型:
double? a = double.TryParse("3.14", out d) ? d : (double?)null;
当您显式转换null
时,下面应该可以工作double? a = double.TryParse("3.14", out d) ? d : (double?)null;
这是因为null的类型必须是d(这里是double)以及a的类型
必须将d
转换为double?
。
试试a = double.TryParse("3.14", out d) ? (double?) d : null;