【问题标题】:Return null for FirstOrDefault() on empty IEnumerable<int>?为空 IEnumerable<int> 上的 FirstOrDefault() 返回 null?
【发布时间】:2009-12-01 10:28:45
【问题描述】:

假设我有以下sn-p:

int? nullableId = GetNonNullableInts().FirstOrDefault();

因为GetNonNullableInts() 返回整数,所以FirstOrDefault 将默认为0
有没有办法让整数列表上的FirstOrDefault 在列表为空时返回null 值?

【问题讨论】:

    标签: c# .net linq


    【解决方案1】:
    int? nullableId = GetNonNullableInts().Cast<int?>().FirstOrDefault();
    

    【讨论】:

    • 有没有办法从 FirstOrDefault 定义默认值?当列表确实返回一组 int 时,无缘无故地强制转换它们对我来说并不是一个好主意。
    • Cast() 不会将它们全部投射 - 它只会在您枚举时投射它们。因此,此代码将强制转换 0 或 1 个整数 - 对性能影响不大。
    • 您不能定义 FirstOrDefault 返回的默认值 - 它返回可枚举的第一个元素,或者如果不存在,则返回 default(T) 的结果。
    • 你是对的,我很困惑。解析一个值没什么大不了的。
    • 如果你想实现 FirstOrValue,这里有一篇关于如何做错与如何做对的文章:stackoverflow.com/questions/1708846/…
    【解决方案2】:

    FirstOrDefault 依赖于来自 IEnumerable&lt;T&gt;T 来知道要返回什么类型,这就是为什么您收到的是 int 而不是 int?

    所以你需要在返回任何值之前将你的项目转换为int?,就像Matt said

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多