Por que não posso comparar um KeyValuePair <TKey, TValue> com o padrão
In .Net 2.5 Normalmente, posso obter uma comparação de igualdade (==) entre um valor e seu tipo padrão
if (myString == default(string))
No entanto, recebo a seguinte exceção quando tento executar uma comparação de igualdade em um KeyValuePair padrão e um KeyValuePair
Code Sample (de um método de pré-extensão, classe ListUtilities estática proto-lambda :))
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;
}
Exceção
Operator '==' não pode ser aplicado a operandos do tipo 'System.Collections.Generic.KeyValuePair <string, object>' e 'System.Collections.Generic.KeyValuePair <string, object>'
É porque, como uma estrutura, o KeyValuePair não é anulável? Se for esse o caso, por que, como, presumivelmente, o padrão foi implementado para lidar com tipos não anuláveis?
EDITA
ara o registro, eu escolhi @ Chris Hannon como resposta selecionada, pois ele me deu o que eu estava procurando, a opção mais elegante e uma explicação sucinta, no entanto, incentivo a leitura de @Dasuraga para obter uma explicação muito abrangente sobre por que isso é o caso