Как избежать ошибок нулевого ключа в словаре?
Как избежать ошибки, если ключ равен нулю?
//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 ответов
Использование 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
}
Вы можете использовать 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" на переменную.)
Метод расширения:
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
Ключ никогда не может быть нулевым в словаре. Словарь - это хеш-таблица, где по определению вам нужен непустой ключ, или хеш-функция не может отображаться на соответствующий элемент.
Вы возвращаете не ту вещь. Не возвращайте словарь, передайте ключ и верните значение.
public static string GetValue(string key)
{
if(Global.dictionary.ContainsKey(key))
{
return Global.dictionary[key];
}
return ""; // or some other value
}