[英]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.