8
votes

Comment éviter les erreurs clés nulles dans le dictionnaire?

Comment éviter d'erreur si la clé est null? XXX PRE>

MISE À JOUR: STROND> P>

Dictionary.Add("Key1", "Text1");
Dictionary["Key2"] <-error! so what can I write in the GET to avoid error?


1 commentaires

Le code ne correspond pas à la question ... Où est votre clé?


5 Réponses :


0
votes

Une clé ne peut jamais être nulle dans un dictionnaire. Un dictionnaire est une hache où vous avez besoin d'une clé non vide ou de la fonction de hachage ne peut pas mapper sur l'élément correspondant.


5 commentaires

Comment vérifier s'il est nul et retourne une chaîne vide?


Je pense que c'était sa question, comment éviter qu'un null est défini comme clé ... cependant, son code ne convient pas à cette hypothèse.


Dans votre code, vous n'avez jamais accès au dictionnaire par clé. Vous retournez simplement un dictionnaire statique. Je ne comprends pas ce que tu veux dire.


@Bobby, cela ne peut jamais arriver. Si vous essayez d'utiliser NULL comme clé dans un dictionnaire, vous obtiendrez l'argumentnulxception afin que vous ne puissiez jamais avoir de dictionnaire avec NULL KEY.


Oui, je pense que c'était sa question, comment éviter cette exception.



13
votes

Vous pouvez utiliser le Dictionary.Containskey code> une méthode>

Donc, vous écririez: p> xxx pré>

Les autres alternatives sont pour envelopper l'accès dans un essayer ... Catch Code > bloquer ou utiliser trygetvalue code> (voir le Exemples sur la page MSDN liée à). P>

string result = null;
if (dict.TryGetValue("Key2", out result))
{
    // Do something with result
}


2 commentaires

Je ne veux pas dire dans une méthode mais dans la déclaration!


@Man - Je ne comprends pas votre question alors. Pouvez-vous mettre à jour le code pour montrer exactement ce que vous essayez d'atteindre?



16
votes

Utiliser trygetvalue : xxx


5 commentaires

+ 1Utilisez la méthode try, n'utilisez pas la méthode Contient si vous souhaitez extraire la valeur, ce sera inefficace car vous ferez efficacement la recherche deux fois.


Cette réponse est incorrecte: trygetvalue jette une exception si la clé est null.


@Jasonbaley Pas sûr que cela a quelque chose à voir avec la réponse, Dictionnaire ne prend pas en charge les clés nulles. Une discussion supplémentaire peut être trouvée dans ce fil: Stackoverflow.com/Questtions/4632945 / dictionnaire-with-null-clé


@Grozz La question était de savoir comment éviter d'obtenir une erreur lorsqu'une touche NULL est fournie pour la recherche dans un dictionnaire. Passer une clé nulle sur trygetvalue lancera toujours une erreur, de sorte qu'il ne répond pas à la question. Dans votre réponse, si clé est NULL, une exception est lancée, alors comment cela adresse-t-il la question initiale? Il essaie d'éviter l'exception.


@Jasonbaley Veuillez relire attentivement toute la question, pas seulement la légende



0
votes

Vous retournez la mauvaise chose. Ne retournez pas le dictionnaire, passez une clé et renvoyez la valeur.

public static string GetValue(string key)
{
    if(Global.dictionary.ContainsKey(key))
    {
        return Global.dictionary[key];
    }

    return ""; // or some other value
}


0 commentaires

3
votes

Méthode d'extension:

var dic = new Dictionary<string, string>
{
   { "key", "value" }
};

string r1 = dic.GetValue("key"); // "value"
string r2 = dic.GetValue("false"); // null


0 commentaires