double? test = true ? null : 1.0;
Run Code Online (Sandbox Code Playgroud)
在我的书中,这是一样的
if (true) {
test = null;
} else {
test = 1.0;
}
Run Code Online (Sandbox Code Playgroud)
但是第一行给出了这个编译错误:
无法确定条件表达式的类型,因为'
<null>'和'double' 之间没有隐式转换.
lep*_*pie 28
发生这种情况是因为编译器尝试从右到左计算语句.这意味着它看到它1.0并且它决定它是双倍(不是双倍?)然后它看到了null.
所以在double和之间显然没有隐式转换null(事实上,Struct和之间没有隐式转换null).
你可以做的是明确告诉编译器两个表达式中的一个可以相互转换.
double? test = true ? null : (double?) 1.0; // 1
double? test = true ? (double?)null : 1.0; // 2
double? test = true ? default(double?) : 1.0; // 3
double? test = true ? new double?() : 1.0; // 4
Run Code Online (Sandbox Code Playgroud)
double? test = true ? (double?)null : 1.0;
Run Code Online (Sandbox Code Playgroud)
将工作.那是因为没有从第一个表达式(null)的类型到第二个表达式(double)的类型的转换.