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