首页 >后端开发 >C++ >为什么是`? 10:null` c#c#ternary operators in Able -nullable类型的禁止?

为什么是`? 10:null` c#c#ternary operators in Able -nullable类型的禁止?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-28 21:51:10174浏览

Why is `? 10 : null` Forbidden in C# Ternary Operators with Nullable Types?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn