如果没有找到项目,为什么LINQ的First方法只返回n​​ull?

sab*_*669 2 .net c# linq

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

usr*_*usr 9

First如果序列为空,则抛出异常.这是唯一的区别.

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

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

整个问题First是拥有这个内置断言通常非常有用.

对于Single和,情况也是如此SingleOrDefault.这些断言序列永远不会有多个元素.事实证明,这通常是您在实际代码中所需要的.

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

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

  • 我特别喜欢你写的最后一部分. (3认同)

Ωme*_*Man 5

FirstOrDefault提供两个逻辑路径来处理是否有数据结果。因此,它的处理仅调用它的范围内本地的First提供了一种通过异常跳出本地范围的方法。

设计原因

First只返回数据为当前范围,而是给出了处理任何的能力不寻常的不可预见的没有数据的情况下,将处理,作为一个应用类型经由一个错误Exception。该异常可以由当前范围之外的集中控制器处理。

因此,这取决于人们希望如何处理缺少数据的情况,是在本地还是在本地范围之外进行处理,以及应在何种程度上处理无数据情况。

为什么微软认为应该有两种不同的方法呢?

程序员可以根据需要灵活地针对不同情况进行编码。