首页 > 后端开发 > C++ > 为什么`getBoolValue()? 10:c#三元操作员中的null`禁止?

为什么`getBoolValue()? 10:c#三元操作员中的null`禁止?

Susan Sarandon
发布: 2025-01-28 22:07:16
原创
859 人浏览过

Why is `GetBoolValue() ? 10 : null` Forbidden in a C# Ternary Operator?

c#ternary操作员和无效整数:为什么? 10 : null

condition ? value1 : value2c#ternary operator(value1)都要求value2

>具有兼容类型。 让我们检查为什么以下代码会产生编译器错误:
<code class="language-csharp">int? x = GetBoolValue() ? 10 : null; </code>
登录后复制

错误消息“无法确定条件表达式的类型,因为'int'和'10'之间没有隐含的转换,”突出显示了核心问题。 编译器将int解释为null>和nullas,嗯,int(在此上下文中代表缺乏值)。 由于

和空值之间没有自动转换,因此编译器无法推断出三元表达式的结果类型。

>解决方案:

为了解决此问题,我们必须确保类型一致性。这是几种方法:

  1. 明确地将10铸成一个无效的整数():int?

    >
    <code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null;</code>
    登录后复制

    这明确地告诉编译器,应将10视为无效整数,允许null>是有效的第二个分支。

  2. >明确施放到一个无效的整数:null>

    <code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null;</code>
    登录后复制
    这个明确施放

    >> null,使三元运算符的双方兼容。int?

  3. >使用的默认值: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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板