首页 > 后端开发 > C++ > C#6.0的无效操作员(?)背后的奥秘是什么?

C#6.0的无效操作员(?)背后的奥秘是什么?

Susan Sarandon
发布: 2025-01-25 15:43:11
原创
875 人浏览过

What's the Mystery Behind C# 6.0's Null-Conditional Operator (?.)?

C# 6.0 问号点运算符的奥秘

C# 6.0 中引入的 ?. 运算符引起了开发人员的兴趣。让我们来揭开它神秘的面纱:

它的作用:

?. 运算符被称为“空条件”运算符。它允许您安全地访问可能为空的对象的属性或调用其方法,而不会导致恼人的 NullReferenceException 异常。

工作原理:

?. 运算符评估第一个操作数。如果它是 null,则表达式停止并返回 null。但是,如果第一个操作数不为 null,则它将继续评估第二个操作数,作为第一个操作数的成员访问。

示例:

考虑以下代码片段:

<code class="language-c#">public class A {
   public string PropertyOfA { get; set; }
}

...

var a = new A();
var foo = "bar";
if(a?.PropertyOfA != foo) {
   //somecode
}</code>
登录后复制

在这里,如果 a 为 null,a?.PropertyOfA 将优雅地返回 null,而不是抛出异常。这允许您使用字符串的 == 运算符将其与 foo 进行比较,并在没有任何问题的情况下继续执行 if 语句。

等效代码:

?. 运算符可以被认为是以下代码的简写版本:

<code class="language-c#">string bar = (a == null ? null : a.PropertyOfA);
if (bar != foo)
{
    ...
}</code>
登录后复制

类型注意事项:

值得注意的是,?. 运算符还可以改变表达式的类型。例如,FileInfo.Length 是 long 类型的属性。但是,使用 ?. 将导致 long? 类型的表达式:

<code class="language-c#">FileInfo fi = ...; // fi 可能为 null
long? length = fi?.Length; // 如果 fi 为 null,length 将为 null</code>
登录后复制

以上是C#6.0的无效操作员(?)背后的奥秘是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

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