2010-11-03 5 views
5

Wie Fehler zu vermeiden, wenn Schlüssel null ist?Wie vermeidet man Nullschlüsselfehler im Wörterbuch?

//Getter/setter 
public static Dictionary<string, string> Dictionary 
{ 
    get { return Global.dictionary; } 
    set { Global.dictionary = value; } 
} 

UPDATE:

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

Dank.

grüße

+1

Der Code die Frage nicht passt ... Wo ist Ihr Schlüssel? –

Antwort

14

Verwendung TryGetValue:

Dictionary<int, string> dict = ...; 
string value; 

if (dict.TryGetValue(key, out value)) 
{ 
    // value found 
    return value; 
} 
else 
{ 
    // value not found, return what you want 
} 
+0

+ 1Verwenden Sie die try-Methode. Verwenden Sie nicht die contains-Methode, wenn Sie den Wert abrufen möchten. Dies ist ineffizient, da Sie die Suche zweimal durchführen –

0

Ein Schlüssel kann nie Null in einem Wörterbuch sein. Ein Dictionary ist eine Hashtabelle, in der Sie per Definition einen nicht leeren Schlüssel benötigen oder die Hash-Funktion nicht dem entsprechenden Element zuordnen kann.

+0

Wie überprüft man, ob es null ist und eine leere Zeichenfolge zurückgibt? – eman

+0

Ich denke, das war seine Frage, wie man vermeidet, dass ein 'Null' als Schlüssel gesetzt wird ... obwohl sein Code nicht ruhig diese Annahme erfüllt. – Bobby

+0

In Ihrem Code greifen Sie niemals per Schlüssel auf das Wörterbuch zu. Sie geben einfach ein statisches Wörterbuch zurück. Ich verstehe nicht, was du meinst. –

9

Sie können die Dictionary.ContainsKey Methode verwenden.

So würden Sie schreiben:

if (myDictionary.ContainsKey("Key2")) 
{ 
    // Do something. 
} 

Die anderen Alternativen sind entweder den Zugang in einem try...catch Block wickeln oder TryGetValue verwenden (die Beispiele auf der MSDN-Seite verlinkt, um zu sehen).

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

Die TryGetMethod ist effizienter, wenn Sie etwas mit dem Ergebnis, tun wollen, wie Sie den Wert nicht einen zweiten Anruf erhalten müssen (wie bei der ContainsKey Methode).

(Natürlich in beiden Methoden würden Sie "Key2" mit einer Variablen ersetzen.)

+0

Ich meine nicht in einer Methode sondern in der Deklaration! – eman

+0

@eman - Ich verstehe deine Frage dann nicht. Können Sie den Code aktualisieren, um genau zu zeigen, was Sie erreichen möchten? – ChrisF

0

Sie Rückkehr die falsche Sache. Geben Sie das Wörterbuch nicht zurück, geben Sie keinen Schlüssel ein, und geben Sie den Wert zurück.

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

    return ""; // or some other value 
} 
2

Eine Erweiterung Methode:

public static TValue GetValue<TKey, TValue>(this Dictionary<TKey, TValue> dic, TKey key) 
{ 
    TValue result; 
    return dic.TryGetValue(key, out result) ? 
     result : 
     default(TValue); 
} 

Verbrauch:

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

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