据我了解,在 Linq 中,该方法FirstOrDefault()可以返回Defaultnull 以外的值。我没有弄清楚的是,当查询结果中没有项目时,这个(和类似的)方法可以返回除了 null 之外的什么东西。是否有任何特定的方法可以设置它,以便如果特定查询没有值,则某些预定义值作为默认值返回?
FirstOrDefault()
Default
一般情况,不仅适用于值类型:
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().
.DefaultIfEmpty(...).First()