Как я могу удостовериться, что FirstOrDefault <KeyValuePair> возвратил значение

Вот упрощенная версия того, что я пытаюсь сделать:

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. Следующий код недопустим:

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 возвратил допустимое значение?

82
задан desautelsj 4 August 2019 в 16:21
поделиться

1 ответ

FirstOrDefault не возвращает значение NULL, оно возвращает default (T) .
Вы должны проверить:

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

From MSDN - Enumerable.FirstOrDefault :

default ( TSource ), если источник пуст; в противном случае первый элемент в источнике .

Примечания:

143
ответ дан 24 November 2019 в 09:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: