C# FirstOrDefault()和FirstOrDefault之间的差异<;MyClass>;()?

C# FirstOrDefault()和FirstOrDefault之间的差异<;MyClass>;()?,c#,linq,extension-methods,C#,Linq,Extension Methods,如果FirstOrDefault()没有返回值,那么返回值为null,那么从FirstOrDefault()返回的是什么?哪种是最佳做法 在某些情况下,最好使用FirstOrDefault(),因为如果调用没有返回任何内容,最好返回null并进行检查。没有FirstOrDefault(),任何时候看到它,编译器都会为您填写。实际签名是 public static TSource FirstOrDefault<TSource>( this IEnumerable<TSou

如果
FirstOrDefault()
没有返回值,那么返回值为null,那么从
FirstOrDefault()
返回的是什么?哪种是最佳做法


在某些情况下,最好使用
FirstOrDefault()
,因为如果调用没有返回任何内容,最好返回null并进行检查。

没有
FirstOrDefault()
,任何时候看到它,编译器都会为您填写
。实际签名是

public static TSource FirstOrDefault<TSource>(
    this IEnumerable<TSource> source)
publicstatictsourcefirstordefault(
这是(不可数的来源)

您正在调用它的
IEnumerable
提供了要填写的信息。

没有
FirstOrDefault()
,只要您看到它,编译器就会为您填写
。实际签名是

public static TSource FirstOrDefault<TSource>(
    this IEnumerable<TSource> source)
publicstatictsourcefirstordefault(
这是(不可数的来源)

您正在调用它的
IEnumerable
提供了要填写的信息。

那么,如果您获取一个空集合并调用它的
FirstOfDefault()
,会发生什么?这是一个单行程序。使用泛型参数,您只是更具体地了解编译器提供的信息。因此,如果您获取一个空集合并对其调用
FirstOfDefault()
,会发生什么情况?这是一个单行程序。对于泛型参数,您只是对编译器提供的信息更加具体。确切地说,因为方法
FirstOrDefault()
返回
default(TSource)
,而不仅仅是
null
,它需要推断类型。因此,即使您没有显式地命名类型,编译器也会计算出来。确切地说,因为方法
FirstOrDefault()
返回
default(TSource)
,而不仅仅是
null
,它需要推断类型。因此,即使您没有显式地命名类型,编译器也会计算出来。