Почему я не могу сравнить KeyValuePair со значением по умолчанию

В .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, чтобы получить очень исчерпывающее объяснение того, почему это так

36
задан johnc 17 June 2011 в 00:49
поделиться