首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# 6空条件操作符检查.Any()?

C# 6空条件操作符检查.Any()?
EN

Stack Overflow用户
提问于 2015-10-26 09:09:32
回答 3查看 2.9K关注 0票数 6

在这里显示的关于空条件运算符的示例(在许多其他网站上)中,它声明:

代码语言:javascript
复制
int? first = customers?[0].Orders.Count(); 

可用于获取第一个客户的计数。但是,此语句不检查集合中是否存在客户,并且可以将索引抛出范围异常。什么应该是正确的(最好是单行)语句,负责检查元素的存在?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-26 09:33:40

null条件运算符用于有条件地访问null,但这不是您遇到的问题。

您正在尝试访问空数组。您可以将其转换为使用FirstOrDefault访问null的情况,并在此上使用操作符:

代码语言:javascript
复制
int? first = customers.FirstOrDefault()?.Orders.Count(); 

如果数组不是空的,它将对第一个项进行操作,如果它是空的,FirstOrDefault将返回由空条件运算符处理的null

编辑:正如注释中提到的那样,如果您正在寻找比第一个项目更多的项目,则可以使用ElementAtOrDefault而不是FirstOrDefault

票数 6
EN

Stack Overflow用户

发布于 2015-10-26 09:17:28

您可以使用LINQ的DefaultIfEmpty,如果查询的集合为空,它将生成一个单例IEnumerable

代码语言:javascript
复制
int? first = customers?.DefaultIfEmpty().First().Orders.Count();

或者如果您想使用索引:

代码语言:javascript
复制
int? first = customers?.DefaultIfEmpty().ToArray()[0].Orders.Count();
票数 2
EN

Stack Overflow用户

发布于 2015-10-26 09:39:58

如果我正确理解了这个问题,您会问是否有一种内置(或简洁)的方法来防范IndexOutOfRangeException

代码语言:javascript
复制
myArray?.Length > 42 ? myArray[42] : null

或者是@w.b。前面提到的,利用ElementAtOrDefault:

代码语言:javascript
复制
myArray?.ElementAtOrDefault(42) 

这两种方法都可以防止NullReferenceExceptionIndexOutOfRangeException的发生。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33342013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档