【问题标题】:FirstOrDefault on IEnumerable with non-nullable contents具有不可为空内容的 IEnumerable 上的 FirstOrDefault
【发布时间】:2015-06-26 09:00:06
【问题描述】:

我需要返回IEnumerable 的第一个元素。如果IEnumerable 为空,我会返回一个特殊值。

此代码可能如下所示:

return myEnumerable.FirstOrDefault() ?? mySpecialValue;

这很好,在myEnumerablecontains 可以为空的东西之前工作正常。

在这种情况下,我得到的最好的是:

return myEnumerable.Any() ? myEnumerable.First() : mySpecialValue;

但在这里我有多个myEnumerable 的枚举!

我该怎么做?我宁愿避免必须捕获任何异常。

【问题讨论】:

    标签: c# ienumerable


    【解决方案1】:

    您可以使用DefaultIfEmpty 的重载来指定您的后备值。那么你也不需要FirstOrDefault,但你可以安全地使用First

    return myEnumerable.DefaultIfEmpty(mySpecialValue).First();
    

    【讨论】:

    • 谢谢!不知道这个!这总是这样做的方法还是return myEnumerable.FirstOrDefault() ?? mySpecialValue;在可用时是首选?
    • 即使使用可空类型,两者也不完全相同。如果序列为空,myEnumerable.DefaultIfEmpty(mySpecialValue).First() 将始终返回mySpecialValue,但如果第一个元素是null,也可以返回null。如果序列为空或第一个值使用nullmyEnumerable.FirstOrDefault() ?? mySpecialValue 将返回mySpecialValue。这可能更好或更糟,具体取决于用例。
    • 谢谢 JonHanna,我还没有看到这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    相关资源
    最近更新 更多