c#ternary操作员和无效整数:为什么? 10 : null
condition ? value1 : value2
c#ternary operator(value1
)都要求value2
和
<code class="language-csharp">int? x = GetBoolValue() ? 10 : null; </code>
10
'之间没有隐含的转换,”突出显示了核心问题。 编译器将int
解释为null
>和null
as,嗯,int
(在此上下文中代表缺乏值)。 由于
>解决方案:
明确地将10铸成一个无效的整数():int?
<code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null;</code>
这明确地告诉编译器,应将10
视为无效整数,允许null
>是有效的第二个分支。
>明确施放到一个无效的整数:null
>
<code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null;</code>
>> null
,使三元运算符的双方兼容。int?
>使用int?
>
<code class="language-csharp">int? x = GetBoolValue() ? 10 : default(int?);</code>
>评估default(int?)
,提供了一种类型安全的方式来表示无效情况。 这通常是明确的首选。null
将根据x
的结果分配10
(作为int?
)或null
>。 关键是要确保三元运算符的两个分支具有相同的兼容类型。 使用GetBoolValue()
>关键字通常被认为是最可读和可维护的解决方案。
以上是为什么`getBoolValue()? 10:c#三元操作员中的null`禁止?的详细内容。更多信息请关注PHP中文网其他相关文章!