我真的不明白First与FirstOrDefault的目的.我的意思是,我理解功能上的差异.但我真的"得到"为什么微软认为应该有两种不同的方法呢?有人知道吗?
First如果序列为空,则抛出异常.这是唯一的区别.
First有一个内置的断言,序列不为空.这是它的目的.有时您知道序列不能为空.例如,如果您在数据库A中查找客户并且它存在,您知道它也将存在于数据库B中.如果B中不存在这将是一个错误.
如果出现错误,您需要一声巨响来提醒您.这就是断言在生产代码中经常有用的原因.你肯定不希望继续用错误的数据执行.这使得查找bug的起源更加困难,甚至可能完全隐藏bug.
整个问题First是拥有这个内置断言通常非常有用.
对于Single和,情况也是如此SingleOrDefault.这些断言序列永远不会有多个元素.事实证明,这通常是您在实际代码中所需要的.
FirstOrDefault还允许您处理序列为空的情况,First而不处理(捕获异常将是异常的滥用).
此外,First记录您对序列长度的了解,以便这一事实对于阅读代码的任何人都是显而易见的.
FirstOrDefault提供两个逻辑路径来处理是否有数据结果。因此,它的处理仅在调用它的范围内是本地的。First提供了一种通过异常跳出本地范围的方法。
设计原因
First只返回数据为当前范围,而是给出了处理任何的能力不寻常的或不可预见的没有数据的情况下,将处理,作为一个应用类型经由一个错误Exception。该异常可以由当前范围之外的集中控制器处理。
因此,这取决于人们希望如何处理缺少数据的情况,是在本地还是在本地范围之外进行处理,以及应在何种程度上处理无数据情况。
为什么微软认为应该有两种不同的方法呢?
程序员可以根据需要灵活地针对不同情况进行编码。