我不太明白First的目的与 FirstOrDefault .我的意思是,我了解功能差异。但我真的不明白为什么微软认为应该有两种不同的方法?有人知道吗?
最佳答案
First
如果序列为空则抛出异常。这是唯一的区别。
First
有一个序列不为空的内置断言。这就是它的目的。有时您知道序列不能为空。例如,如果您在数据库 A 中查找一个客户并且它存在,您就知道它也将存在于数据库 B 中。如果它在 B 中不存在,这将是一个错误。
如果出现错误,您希望发出一声巨响来提醒您。这就是为什么断言在生产代码中经常有用的原因。您当然不想要继续执行错误数据。这使得查找错误的来源变得更加困难,甚至可能完全隐藏错误。
First
的全部要点在于,拥有此内置断言通常非常有用。
Single
和SingleOrDefault
也是如此。这些断言序列永远不会有一个以上的元素。事实证明,这通常是您在实际代码中想要的。
FirstOrDefault
还允许您处理序列为空的情况,而 First
则不然(捕获异常将是对异常的滥用)。
此外,First
记录了您对序列长度的了解,以便阅读代码的任何人都清楚这一事实。
关于c# - 如果未找到项目,为什么 LINQ 的 First 方法不简单地返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32487605/