🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# NULL 条件运算符(C# 和 Visual Basic) 用于在执行成员访问 (**?.**) 或索引 (**?[**) 操作之前,测试是否存在 NULL。这些运算符可帮助编写更少的代码来处理 null 检查,尤其是对于下降到数据结构。 [VB](https://msdn.microsoft.com/zh-CN/library/dn986595.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1) ``` int? length = customers?.Length; // null if customers is null Customer first = customers?[0]; // null if customers is null int? count = customers?[0]?.Orders?.Count(); // null if customers, the first customer, or Orders is null ``` 最后一个示例演示 NULL 条件运算符会短路。如果条件成员访问和索引操作链中的某个操作返回 NULL,则该链其余部分的执行将停止。表达式中优先级较低的其他操作将继续。例如,以下的示例中的 E 将始终执行,**??** 和 **==** 操作将执行。 <a>visualbasicANDcsharp</a> ``` A?.B?.C?[0] ?? E A?.B?.C?[0] == E ``` NULL 条件成员访问的另一个用途是使用非常少的代码以线程安全的方式调用委托。旧方法需要如下所示的代码: [VB](https://msdn.microsoft.com/zh-CN/library/dn986595.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-3) ``` var handler = this.PropertyChanged; if (handler != null) handler(…) ``` 新的方法是要简单得多: <a>visualbasicANDcsharp</a> ``` PropertyChanged?.Invoke(e) ``` 新方法是线程安全的,因为编译器生成代码以评估 PropertyChanged(仅一次),从而使结果保持在临时变量中。 你需要显式调用 Invoke 方法,因为不存在 NULL 条件委托调用语法 PropertyChanged?(e)。有太多不明确的分析情况来允许它。 ## 语言规范 有关详细信息,请参阅 [C# 语言规范](https://msdn.microsoft.com/zh-CN/library/ms228593.aspx)。该语言规范是 C# 语法和用法的权威资料。 有关详细信息,请参阅 [Visual Basic 语言参考](https://msdn.microsoft.com/zh-CN/library/sh9ywfdk.aspx)。 ## 请参阅 [C# 参考](https://msdn.microsoft.com/zh-CN/library/618ayhy6.aspx) [C# 编程指南](https://msdn.microsoft.com/zh-CN/library/67ef8sbd.aspx) [Visual Basic 语言参考](https://msdn.microsoft.com/zh-CN/library/sh9ywfdk.aspx) [Visual Basic 编程指南](https://msdn.microsoft.com/zh-CN/library/y4wf33f0.aspx)