首页 > 后端开发 > C++ > 为什么三元运算符在C#中以无效的类型失败?

为什么三元运算符在C#中以无效的类型失败?

Patricia Arquette
发布: 2025-01-28 21:56:09
原创
899 人浏览过

Why Does the Ternary Operator Fail with Nullable Types in C#?

C#中的三元运算符与可空类型:限制详解

在处理可空值类型时,三元运算符 (? :) 可能会产生意想不到的行为。一个常见问题是尝试使用三元运算符将整型字面量或 null 赋值给可空整型变量。

例如,考虑以下代码:

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

这段代码中,三元运算符尝试计算右侧表达式:

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

其中,GetBoolValue() 返回一个布尔值,10 是一个整型字面量,null 是一个空引用。编译器尝试隐式转换这些值以匹配左侧表达式的类型,即 int?

然而,整型字面量(不可空)和可空整型(int?)之间没有隐式转换。同样,null 和整型之间也没有隐式转换。这导致编译器错误:

<code>无法确定条件表达式的类型,因为整型和<null>之间没有隐式转换。</code>
登录后复制

为了解决这个问题,必须修改右侧表达式,确保三元运算符的两个分支都返回与左侧表达式兼容的值。这可以通过隐式转换或显式转换来实现:

<code class="language-csharp">// 隐式转换(整型字面量到 int?)
int? x = GetBoolValue() ? (int?)10 : null;

// 显式转换(null 到 int?)
int? x = GetBoolValue() ? 10 : (int?)null;

// int? 的默认值(将 null 转换为 default(int?))
int? x = GetBoolValue() ? 10 : default(int?);</code>
登录后复制

通过这些修改,编译器可以成功计算右侧表达式并确定条件表达式的类型,从而消除错误。

以上是为什么三元运算符在C#中以无效的类型失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

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