146 votes

Qu'arrive-t-il à la recherche dans le<int, int> dictionnaire C# si la clé n'existe pas ?

J'ai essayé de vérifier pour NULL, mais le compilateur avertit que cette condition ne se produira jamais. Qu'est-ce que je cherche ?

29voto

antik Points 3690

Le dictionnaire lance une exception de KeyNotFound dans le cas où 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 une valeur de NULL plus efficacement. Sans ce comportement, la vérification d'un résultat nul de l'opérateur [] indiquerait soit une valeur nulle soit la non-existence de la touche d'entrée qui n'est pas bonne.

11voto

ChrisF Points 74295

Si vous vérifiez juste 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.

3voto

ZombieSheep Points 18967

Vous devriez vérifier pour Dictionary.ContainsKey(clé int) avant d'essayer de sortir 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.
}

1voto

sheamus Points 429

Une classe d'aide 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;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X