繁体   English   中英

为什么IEnumerable不行?第一个()工作?

[英]Why doesn't IEnumerable?.First() work?

当我尝试在可枚举对象上使用?.First()时,当对象不包含任何项时,它会抛出错误“sequence contains no elements”。

我认识到解决方案是使用.FirstOrDefault(),但我不明白为什么我原来的努力不起作用。 我误解了某些东西还是仅仅是“其中一件事”?

空序列不为null ,它是一个实际的对象,其中没有任何项目。 ?. 如果表达式是不调用该成员国null ,这不是的话,那么First被调用, First抛出时,它传递了一个空序列异常。

在执行成员访问操作之前,空条件运算符(?)测试null。 空序列不为空,它只包含没有元素。 所以当你调用First()时它会失败,因为没有第一个元素。

因为空集合不为null

当序列不包含元素时,First()显式抛出异常。 如果没有元素,则FirstOrDefault()给出null (编辑:或者更确切地说,它给出了一个默认值,对于引用类型为null )。 你想要First()从空序列返回什么?

根据MSDN文档:

    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,则运行时将尝试返回第一个元素。 由于集合为空并且您没有使用FirstOrDefault ,因此抛出异常。

链接: https//msdn.microsoft.com/en-us/library/dn986595.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM