Как избежать ошибок нулевого ключа в словаре? - PullRequest
7 голосов
/ 03 ноября 2010

Как избежать ошибки, если ключ пуст?

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

ОБНОВЛЕНИЕ:

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

Спасибо.

привет

Ответы [ 5 ]

16 голосов
/ 03 ноября 2010

Использование 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
}
11 голосов
/ 03 ноября 2010

Вы можете использовать метод Dictionary.ContainsKey.

Таким образом, вы написали бы:

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

Другие альтернативы - либо обернуть доступ вtry...catch заблокируйте или используйте TryGetValue (см. Примеры на странице MSDN, на которую указывает ссылка).

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

TryGetMethod более эффективен, если вы хотите что-то сделать срезультат, так как вам не нужен второй вызов для получения значения (как если бы вы использовали метод ContainsKey).

(Конечно, в обоих методах вы должны заменить «Key2» на переменную.)

2 голосов
/ 03 ноября 2010

Метод расширения:

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

Использование:

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

string r1 = dic.GetValue("key"); // "value"
string r2 = dic.GetValue("false"); // null
0 голосов
/ 03 ноября 2010

Вы возвращаете не ту вещь.Не возвращайте словарь, передайте ключ и верните значение.

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

    return ""; // or some other value
}
0 голосов
/ 03 ноября 2010

Ключ никогда не может быть нулевым в словаре.Словарь - это хеш-таблица, где по определению вам нужен непустой ключ, или хеш-функция не может отображаться на соответствующий элемент.

...