FirstOrDefault 在整数列表上不返回 null

Bou*_*egh 1 c# linq

当我FirstOrDefault()在整数或布尔值的空列表上使用时,我得到0orfalse而不是null

我知道这是设计使然,因为它会返回default(T),但我如何强制它返回呢null

var emptyList = new List<int>();

emptyList.FirstOrDefault() == 0; // I want to receive null instead
Run Code Online (Sandbox Code Playgroud)

Bou*_*egh 5

要使FirstOrDefault(),LastOrDefault()SingleOrDefault()返回null作为列表(而不是引用)上的默认值:

使用 来将元素强制转换IEnumerable<T>.Cast<T?>()为可为空。

var emptyList = new List<int>();

emptyList.FirstOrDefault() == 0;
emptyList.Cast<int?>().FirstOrDefault() == null;
Run Code Online (Sandbox Code Playgroud)
  • IEnumerable<T>.FirstOrDefault()default(T)当没有结果时 会返回。
    • 当 T 是值类型/结构时,例如int,它将返回,default(T)例如int0
    • 当 T 是引用类型可空值类型(如int)时?布尔?或一个,那么它将返回null,如default(int?) == null.