首页 > 后端开发 > C++ > C# 6.0 Null 条件运算符 (?.) 如何简化 Null 处理?

C# 6.0 Null 条件运算符 (?.) 如何简化 Null 处理?

Patricia Arquette
发布: 2025-01-25 15:26:08
原创
638 人浏览过

How Does the C# 6.0 Null-Conditional Operator (?. ) Simplify Null Handling?

C# 6.0 的 ?. 运算符:简化空值处理

C# 6.0 引入了 ?. 运算符,为空值处理带来了极大的便利。这个运算符,通常被称为空条件运算符,提供了一种简洁且安全的方式来访问可空对象的属性或调用其方法。

让我们来看下面的代码片段:

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

...

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

让我们分解一下这个运算符的工作原理:

  • 它首先评估第一个操作数 (a),并检查它是否为空。如果 a 为空,则整个表达式将评估为 null,不会进行进一步的评估。
  • 如果 a 不为空,则继续评估第二个操作数 (PropertyOfA) 作为 a 的成员访问。在本例中,它访问 a 的 PropertyOfA 属性。
  • 表达式的结果要么是 null 值(如果 a 为空),要么是 a.PropertyOfA 的值。

本质上,?. 运算符充当了防止空引用异常的保护措施。它允许您访问可空对象的属性或调用其方法,而不会导致应用程序崩溃。

考虑这种替代语法:

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

虽然这种方法达到了相同的结果,但它涉及单独的空值检查和条件赋值。?. 运算符提供了一种更简洁优雅的解决方案。

此外,?. 运算符可以改变表达式的类型。例如,FileInfo.Length 是一个 long 属性。但是,如果您在其上使用 ?. 运算符:

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

您最终得到一个 long? 类型的表达式,其中问号表示该值可能为空。这消除了对显式空值检查的需求,简化了您的代码并提高了其可读性。

以上是C# 6.0 Null 条件运算符 (?.) 如何简化 Null 处理?的详细内容。更多信息请关注PHP中文网其他相关文章!

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