新的 C# 6.0 空条件运算符是编写更简洁和更少复杂代码的便捷工具。假设一个客户有一组客户,那么如果为 null ,则可以使用此方法获得 null 而不是长度(来自MSDNcustomers
的示例):
int? length = customers?.Length;
同样,您可以通过以下方式获得 null 而不是客户:
Customer first = customers?[0];
对于更详细的表达式,如果customers
为 null、第一个客户为 null 或第一个客户的Orders
对象为 null,则生成 null:
int? count = customers?[0]?.Orders?.Count();
但是还有一个有趣的案例,即空条件运算符似乎没有解决的不存在的客户。我们在上面看到覆盖了一个空客户,即如果customers
数组中的条目为空。但这与不存在的客户截然不同,例如5
在 3 元素数组中查找客户或n
在 0 元素列表中查找客户。(请注意,同样的讨论也适用于字典查找。)
在我看来,空条件运算符只专注于否定 NullReferenceException 的影响;IndexOutOfRangeException 或 KeyNotFoundException 是孤独的,暴露的,蜷缩在角落里,需要自生自灭!我认为,本着空条件运算符的精神,它也应该能够处理这些情况......这导致了我的问题。
我错过了吗?空条件是否提供任何优雅的方式来真正覆盖这个表达式......
customers?[0]?.Orders?.Count();
...当没有第零个元素时?