为什么在LINQ中使用First而不是FirstOrDefault?

Mik*_*ynn 19 .net c# linq

可能重复:
何时使用.First和何时使用.FirstOrDefault和LINQ?

什么是使用的点First在LINQ运营商时,你可以使用FirstOrDefault操盘手?

var q = results.First(); // Error if empty
Run Code Online (Sandbox Code Playgroud)

Dav*_*fer 17

要直接回答您的具体问题(First如果您可以随时使用FirstOrDefault,为何使用),有些情况下您无法使用FirstOrDefault,因为它会丢失信息!"默认值"可能是源列表中的有效元素类型.您无法区分枚举中的第一个元素是null/default与列表中没有元素,除非您使用First或首先检查是否存在Any需要双枚举的元素.

对于值类型的枚举,尤其如此int[].default(int)0,这也很可能是数组的有效值.

通常,这两种方法代表不同的逻辑流程.First如果没有任何元素是"例外"(一个错误),然后想要在你的应用程序中处理带外,将使用它.在这种情况下,您"期望"至少拥有一个元素.FirstOrDefault在空集上返回null,这意味着您需要使用返回的值执行其他处理.这与//etc 上的Parsevs TryParse方法类似.事实上,您的问题在某些方面导致了更为笼统的问题,即为什么要使用例外.intdouble

由于First抛出一个异常,它本身借给所有的代码重用机会,异常提供.例如,您可以这样做:

try
{
    x = arr1.First();
    y = arr2.First();
    z = arr3.First();
}
catch
{
    throw new ArgumentException();
}
Run Code Online (Sandbox Code Playgroud)


Aar*_*ver 8

显式强制异常升级而不是执行null检查.