Intenté comprobar si era nulo, pero el compilador advierte que esta condición nunca ocurrirá. ¿Qué debería estar buscando?
c#
dictionary
deltanovember
fuente
fuente
ContainsKey
, lo cual es cierto, porque también tiene que extraer el valor. Sin embargo, no está haciendo dos búsquedas.El Diccionario lanza una
KeyNotFound
excepción en caso de que el diccionario no contenga su clave.Como se sugiere,
ContainsKey
es la precaución adecuada.TryGetValue
también es eficaz.Esto permite que el diccionario almacene un valor nulo de manera más efectiva. Sin que se comporte de esta manera, la verificación de un resultado nulo del operador [] indicaría un valor nulo O la inexistencia de la clave de entrada, lo cual no es bueno.
fuente
Si solo está verificando antes de intentar agregar un nuevo valor, use el
ContainsKey
método:Si está comprobando que existe el valor, use el
TryGetValue
método como se describe en la respuesta de Jon Skeet.fuente
GetValueElseAdd
métodos a los que le da un valor (o aFunc<TValue>
) para guardar también la resolución en el Insertar si va a agregar si no está allí. Supongo que la razón por la que no se ha incluido en las bibliotecas de .NET es porque la ruta Add es menos frecuente si la estás usando en un estilo de caché]TryGetValue
sería mejor, pero si desea verificar si el diccionario contiene la clave para evitar adiciones duplicadas, diría queContainsKey
es igual de bueno (si no mejor).Debe buscar Dictionary.ContainsKey (clave int) antes de intentar extraer el valor.
fuente
TryGetValue
. Afortunadamente, lo hago ahora, así que lo sabré en el futuro. Dejaré esta respuesta intacta, aunque la discusión es valiosa.TryGetValue
en una expresión lambda. Aunque eso me hace pensar que una nueva extensión de C # sería uncatch
operador similar alnull
operador de fusión.Una clase de ayudante es útil:
fuente
ContainsKey es lo que estás buscando.
fuente
Probablemente deberías usar:
La razón por la que no puede verificar si es nulo es que la clave aquí es un tipo de valor.
fuente
Si la clave está presente en el diccionario, devuelve el valor de la clave; de lo contrario, devuelve 0.
Espero que este código te ayude.
fuente
TryGetValue
es suficiente, use envalue
lugar deresult
Considere la opción de encapsular este diccionario en particular y proporcione un método para devolver el valor de esa clave:
Entonces puede administrar el comportamiento de este diccionario.
Por ejemplo aquí: si el diccionario no tiene la clave, devuelve la clave que pasas por parámetro.
fuente