为什么LINQ的第一种方法如果没有找到项目则只返回null?

时间:2015-09-09 19:22:08

标签: c# .net linq

我并非真正理解FirstFirstOrDefault的目的。我的意思是,我理解功能上的差异。但我真的没有"得到"为什么微软认为应该有两种不同的方法呢?有谁知道吗?

1 个答案:

答案 0 :(得分:9)

如果序列为空,

First会抛出异常。这是唯一的区别。

First有一个内置断言,序列不为空。这是它的目的。有时您知道序列不能为空。例如,如果您在数据库A中查找客户并且它存在,您知道它也将存在于数据库B中。如果B中不存在这将是一个错误。

如果出现错误,你需要一声巨响来提醒你。这就是断言在生产代码中经常有用的原因。你肯定想要继续执行坏数据。这使得查找bug的起源更加困难,甚至可能完全隐藏bug。

First的重点是拥有这个内置断言通常非常有用。

SingleSingleOrDefault也是如此。这些断言序列永远不会有多个元素。事实证明,这通常是您在实际代码中所需要的。

FirstOrDefault还允许您处理序列为空的情况,而First则不会(捕获异常会滥用异常)。

此外,First记录了您对序列长度的了解,因此对于阅读代码的任何人来说,这一事实都是显而易见的。