J'ai essayé de vérifier null mais le compilateur prévient que cette condition ne se produira jamais. Que devrais-je rechercher?
En supposant que vous souhaitiez obtenir la valeur si la clé existe , utilisez Dictionary<TKey, TValue>.TryGetValue
:
int value;
if (dictionary.TryGetValue(key, out value))
{
// Key was in dictionary; "value" contains corresponding value
}
else
{
// Key wasn't in dictionary; "value" is now 0
}
(Utiliser ContainsKey
puis l'indexeur fait apparaître la clé deux fois, ce qui est plutôt inutile.)
Notez que même si utilisiez des types de référence, la recherche de la valeur NULL ne fonctionnerait pas - l'indexeur pour Dictionary<,>
lancera une exception si vous demandez une clé manquante, plutôt que de renvoyer null. (Ceci est une grande différence entre Dictionary<,>
et Hashtable
.)
Le dictionnaire lève une exception KeyNotFound
si le dictionnaire ne contient pas votre clé.
Comme suggéré, ContainsKey
est la précaution appropriée. TryGetValue
est également efficace.
Cela permet au dictionnaire de stocker plus efficacement une valeur null. Sans ce comportement, la recherche d'un résultat nul par l'opérateur [] indiquerait soit une valeur nulle OR la non-existence de la clé d'entrée qui n'est pas bonne.).
Si vous ne faites que vérifier avant d'essayer d'ajouter une nouvelle valeur, utilisez la méthode ContainsKey
:
if (!openWith.ContainsKey("ht"))
{
openWith.Add("ht", "hypertrm.exe");
}
Si vous vérifiez que la valeur existe, utilisez la méthode TryGetValue
comme décrit dans la réponse de Jon Skeet.
Vous devriez vérifier Dictionary.ContainsKey (int key) avant d'essayer d'extraire la valeur.
Dictionary<int, int> myDictionary = new Dictionary<int, int>();
myDictionary.Add(2,4);
myDictionary.Add(3,5);
int keyToFind = 7;
if(myDictionary.ContainsKey(keyToFind))
{
myValueLookup = myDictionay[keyToFind];
// do work...
}
else
{
// the key doesn't exist.
}
ContainsKey est ce que vous recherchez.
Vous devriez probablement utiliser:
if(myDictionary.ContainsKey(someInt))
{
// do something
}
La raison pour laquelle vous ne pouvez pas vérifier la valeur null est que la clé ici est un type de valeur.
Une classe d'assistance est pratique:
public static class DictionaryHelper
{
public static TVal Get<TKey, TVal>(this Dictionary<TKey, TVal> dictionary, TKey key, TVal defaultVal = default(TVal))
{
TVal val;
if( dictionary.TryGetValue(key, out val) )
{
return val;
}
return defaultVal;
}
}
int result= YourDictionaryName.TryGetValue(key, out int value) ? YourDictionaryName[key] : 0;
Si la clé est présente dans le dictionnaire, elle renvoie la valeur de la clé, sinon elle renvoie 0.
Espérons que ce code vous aide.