在空IEnumerable <int>上为FirstOrDefault()返回null?

Bor*_*ens 26 .net c# linq

说我有以下代码段:

int? nullableId = GetNonNullableInts().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

因为GetNonNullableInts()返回整数,所以FirstOrDefault默认为0.当列表为空时,
有没有办法使FirstOrDefault整数列表返回一个null值?

Mat*_*lls 46

int? nullableId = GetNonNullableInts().Cast<int?>().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

  • Cast()不会全部转换它们 - 它只会在枚举时强制转换它们.因此,此代码将转换为零或一个整数 - 没有太大的性能损失. (8认同)
  • 有没有办法从FirstOrDefault定义默认值?当列表确实返回一组整数时,没有任何真正的理由将它们全部投射出来对我来说并不是一个好主意. (3认同)
  • 您无法定义FirstOrDefault返回的默认值 - 它返回枚举中的第一个元素,如果不存在,则返回`default(T)`的结果. (2认同)
  • 如果你想实现 FirstOrValue,这里有一篇关于如何做错与如何正确做的文章:http://stackoverflow.com/questions/1708846/a-different-take-on-firstordefault (2认同)