1. ホーム
  2. .net

[解決済み] FirstOrDefault。null 以外のデフォルト値

2022-04-23 22:08:10

質問

私の理解では、Linqではメソッド FirstOrDefault() を返すことができます。 Default の値は、null 以外のものです。 クエリ結果に項目がない場合、この(および類似の)メソッドで null 以外のどのようなものを返すことができるのか、まだ解明されていません。 特定のクエリに値がない場合、あらかじめ定義された値をデフォルト値として返すように設定する方法はありますか?

解決方法は?

バリュータイプに限らず、一般的なケースです。

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);

しかし、ステーキさんが指摘されているように、これは .DefaultIfEmpty(...).First() .