C#三元运算符与可空类型:为什么? 10 : null
会报错?
在C#中使用可空类型时,表达式内的类型一致性至关重要。三元运算符(? :)根据条件评估两个表达式,如果条件为真则返回第一个表达式的结果,否则返回第二个表达式的结果。
考虑以下代码片段:
<code class="language-csharp">int? x = GetBoolValue() ? 10 : null; // 错误</code>
这里,我们试图将int和null赋值给可空int变量x。这会引发编译器错误,因为这两种类型之间没有隐式转换。
编译器首先尝试评估右侧表达式:
<code class="language-csharp">GetBoolValue() ? 10 : null</code>
字面量10是int类型,而null是空字面量。两者之间没有隐式转换,因此出现错误。
为了解决这个问题,我们可以执行显式转换以确保类型一致性:
<code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null; // 将10转换为int?</code>
或者,我们可以将空字面量转换为int?:
<code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null; // 将null转换为int?</code>
或者,我们可以使用default关键字:
<code class="language-csharp">int? x = GetBoolValue() ? 10 : default(int?); // 将x初始化为null</code>
通过确保类型一致性,我们可以避免编译器错误并保持可空类型的完整性。
以上是为什么是`? 10:null` c#c#ternary operators in Able -nullable类型的禁止?的详细内容。更多信息请关注PHP中文网其他相关文章!