В .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? Если это так, почему, как, предположительно, по умолчанию было реализовано обращение к типам с нулевым значением?
EDIT
Для записи я выбрал @Chris Hannon в качестве выбранного ответа, поскольку он дал мне то, что я искал, самый элегантный вариант и краткое объяснение, однако я поощряю чтение @Dasuraga для очень подробного объяснения относительно почему это так.