2010-11-03 19 views
5

Anahtar null ise hata nasıl önlenir?Sözlükteki null anahtar hataları nasıl önlenir?

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

GÜNCELLEME:

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

teşekkürler.

Saygılarımızla

+1

kod soru ... anahtardır uymuyor? –

cevap

14

Kullanım 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

+ 1Yol yöntemini kullanın, değeri almak istiyorsanız, içerme yöntemini kullanmayın, iki kez etkili bir şekilde yaptığınız için verimsiz olur –

0

Bir anahtar bir sözlükte boş olamaz. Bir sözlük, tanım gereği boş olmayan bir anahtara ihtiyaç duyduğunuz veya karma fonksiyonun ilgili öğeyle eşlenemeyeceği bir karma durumdur.

+0

Boş olup olmadığını kontrol etmek ve boş bir dizge döndürmek nasıl? – eman

+0

Bence onun sorusu, “null” un anahtar olarak ayarlanmasının nasıl önleneceğiydi ... ama onun kodu, bu varsayımlara uymuyor. – Bobby

+0

Kodunuzda, sözlüğe hiç bir zaman erişemezsiniz. Sadece bir statik sözlüğe dönersiniz. Anlamıyorum ne demek istiyorsun –

9

Dictionary.ContainsKey yöntemini kullanabilirsiniz.

Yani yazmak istiyorum:

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

diğer alternatifler bir try...catch blokta erişimi sarmak ya da (bağlı MSDN sayfasındaki örneklere bakın) TryGetValue kullanmak için her bulunmaktadır. Eğer değeri elde etmek ikinci bir arama gerekmez olarak (eğer ContainsKey yöntemiyle olduğu gibi) sonucu ile bir şeyler yapmak istiyorsanız

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

TryGetMethod daha verimlidir.

(Elbette, her iki yöntemde de bir değişkenle "anahtar2" değiştireceksiniz.)

+0

Bir yöntemde değil, beyanda demek istemiyorum! – eman

+0

@eman - Sorunuzu anlamıyorum o zaman. Tam olarak neyi başarmaya çalıştığınızı göstermek için kodu günceller misiniz? – ChrisF

0

Yanlış şeyi geri dönüyoruz. Sözlüğü geri çevirme, bir anahtar iletme ve değeri döndürme.

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

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

bir uzantısı yöntemi:

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

Kullanımı:

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

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