В .Net 2.5 Обычно я могу получить сравнение на равенство (==) между значением и его типом по умолчанию
if (myString == default(string))
Однако я получаю следующее исключение, когда пытаюсь запустить сравнение на равенство для KeyValuePair по умолчанию и KeyValuePair
Пример кода (из метод предварительного расширения, прото-лямбда статический класс ListUtilities :))
public static TKey
FirstKeyOrDefault<TKey, TValue>(Dictionary<TKey, TValue> lookups,
Predicate<KeyValuePair<TKey, TValue>> predicate)
{
KeyValuePair<TKey, TValue> pair = FirstOrDefault(lookups, predicate);
return pair == default(KeyValuePair<TKey, TValue>) ?
default(TKey) : pair.Key;
}
Исключение:
Оператор '==' не может применяться к операнды типа 'System.Collections.Generic.KeyValuePair <строка, объект>' и 'System.Collections.Generic.KeyValuePair
'
Это потому, что как структура KeyValuePair не допускает значения NULL? Если это так, то почему, поскольку, предположительно, по умолчанию был реализован тип, не допускающий значения NULL?
РЕДАКТИРОВАТЬ
Для записи я выбрал @Chris Hannon в качестве выбранного ответа, поскольку он дал мне то, что я искал , самый элегантный вариант и краткое объяснение, однако я рекомендую прочитать @Dasuraga, чтобы получить очень исчерпывающее объяснение того, почему это так