c# - valor - ¿Cómo puede un objeto no ser comparado con nulo?
tipo de dato null (5)
Tengo un parámetro ''opcional'' en un método que es un KeyValuePair. Quería una sobrecarga que pase el método nulo al núcleo para este parámetro, pero en el método central, cuando quiero verificar si KeyValuePair es nulo, aparece el siguiente error:
Operator ''!='' cannot be applied to operands of type System.Collections.Generic.KeyValuePair<string,object>'' and ''<null>.
¿Cómo no puedo verificar si un objeto es nulo?
Debido a que KeyValuePair es una estructura (un tipo de valor), solo puede comparar valores nulos en los tipos de referencia.
Supongo que aún no has escrito esa sobrecarga extra. Fallará cuando intente pasar null como el valor de un KeyValuePair.
Estoy respondiendo esto a pesar de su edad porque es el primer resultado de Google para "test keyvaluepair null"
La respuesta especificada es correcta, pero no responde completamente el problema, al menos el que estaba teniendo, donde necesito probar la existencia del KeyValuePair
y pasar a otra verificación del Dictionary
si no existe el camino que estoy esperando.
Usar el método anterior no funcionó para mí porque el compilador se atraganta al obtener KeyValuePair.Value
de KeyValuePair<>?
, por lo que es mejor utilizar el default(KeyValuePair<>)
como se ve en esta pregunta + respuestas. El valor predeterminado para KeyValuePair
KeyValuePair <K, V> es una estructura y, por lo tanto, no puede ser nulo bajo ninguna circunstancia. Solo un tipo de referencia puede ser nulo.
Si intenta capturar un valor incorrecto, deberá validar los miembros de clave y valor individualmente.
Puede usar KeyValuePair.IsNull () para determinar si se ha establecido KeyValuePair.
KeyValuePair<K,V>
es una estructura, no una clase. Es como hacer:
int i = 10;
if (i != null) ...
(Aunque eso es realmente legal, con una advertencia, debido a las reglas de conversión impaulables. Lo importante es que la condición if
nunca será verdadera).
Para que sea "opcional", puede usar la forma que admite valores NULL:
static void Foo(KeyValuePair<object,string>? pair)
{
if (pair != null)
{
}
// Other code
}
Nota la ? en KeyValuePair<object,string>?