从 MSDN 文档中,以下两个片段是相等的:
bool value;
int x = (value) ? 0 : 1;
和
bool value;
int x;
if (value)
x = 0;
else
x = 1;
很棒,很棒。我用它所有的时间。简洁有效。
如果我们尝试使用可为空的类型,如下所示:
int? x = (value.HasValue) ? value.Value : null;
我们得到一个编译时错误:
The type of conditional expression cannot be determined
because there is no implicit conversion between '{NullableType}' and null.
这编译得很好:
int? value;
int? x;
if (value.HasValue)
x = value.Value;
else
x = null;
所以,我知道编译器需要(int?)null
以编译第一条语句的方式进行显式转换。我不明白为什么该语句需要它,而不是If Else
块。