小编典典

FirstOrDefault:除 null 以外的默认值

all

据我了解,在 Linq 中,该方法FirstOrDefault()可以返回Defaultnull
以外的值。我没有弄清楚的是,当查询结果中没有项目时,这个(和类似的)方法可以返回除了 null
之外的什么东西。是否有任何特定的方法可以设置它,以便如果特定查询没有值,则某些预定义值作为默​​认值返回?


阅读 63

收藏
2022-08-21

共1个答案

小编典典

一般情况,不仅适用于值类型:

static class ExtensionsThatWillAppearOnEverything
{
    public static T IfDefaultGiveMe<T>(this T value, T alternate)
    {
        if (value.Equals(default(T))) return alternate;
        return value;
    }
}

var result = query.FirstOrDefault().IfDefaultGiveMe(otherDefaultValue);

同样,这并不能真正判断您的序列中是否有 任何 内容,或者第一个值是否是默认值。

如果你关心这个,你可以做类似的事情

static class ExtensionsThatWillAppearOnIEnumerables
{
    public static T FirstOr<T>(this IEnumerable<T> source, T alternate)
    {
        foreach(T t in source)
            return t;
        return alternate;
    }
}

并用作

var result = query.FirstOr(otherDefaultValue);

尽管 Steak 先生指出,这也可以由.DefaultIfEmpty(...).First().

2022-08-21