1. ホーム
  2. c#

[解決済み] FirstOrDefault<KeyValuePair>が値を返したことを確認するにはどうすればよいですか?

2022-12-05 05:05:43

質問

私がやろうとしていることの簡略版は以下の通りです。

var days = new Dictionary<int, string>();
days.Add(1, "Monday");
days.Add(2, "Tuesday");
...
days.Add(7, "Sunday");

var sampleText = "My favorite day of the week is 'xyz'";
var day = days.FirstOrDefault(x => sampleText.Contains(x.Value));

xyz'は辞書に存在しないので、FirstOrDefaultメソッドは有効な値を返しません。この状況をチェックできるようにしたいのですが、KeyValuePair は struc なので、結果を "null" と比較することができないことに気づきました。以下のコードは無効です。

if (day == null) {
    System.Diagnotics.Debug.Write("Couldn't find day of week");
}

このコードをコンパイルしようとすると、Visual Studioは次のようなエラーを投げます。

Operator '==' cannot be applied to operands of type 'System.Collections.Generic.KeyValuePair<int,string>' and '<null>'

FirstOrDefaultが有効な値を返したかどうかを確認するにはどうしたらよいですか?

どのように解決するのですか?

FirstOrDefault はnullを返さず default(T) .

を確認する必要があります。

var defaultDay = default(KeyValuePair<int, string>);
bool b = day.Equals(defaultDay);

から MSDN Enumerable.FirstOrDefault<TSource> :

デフォルト( TSource ) の最初の要素を使用します。 ソース .

注意事項