Вот упрощенная версия того, что я пытаюсь сделать:
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 возвратил допустимое значение?
FirstOrDefault
не возвращает значение NULL, оно возвращает default (T)
.
Вы должны проверить:
var defaultDay = default(KeyValuePair<int, string>);
bool b = day.Equals(defaultDay);
From MSDN - Enumerable.FirstOrDefault
:
default ( TSource ), если источник пуст; в противном случае первый элемент в источнике .
Примечания:
EqualityComparer .Default.Equals (day, defaultDay)
, потому что .Equals
может быть переопределено или день
может быть null
. var defaultDay = default;
, см. Типизированный целевой литерал "default" . FirstOrDefault