如何避免字典中的空键错误?

时间:2010-11-03 10:17:51

标签: c# static-methods

如果key为null,如何避免错误?

//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 个答案:

答案 0 :(得分:16)

使用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
}

答案 1 :(得分:11)

您可以使用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 :(得分:2)

扩展方法:

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

答案 3 :(得分:0)

字典中的键永远不能为空。字典是一个哈希表,根据定义,您需要一个非空键或哈希函数不能映射到相应的元素。

答案 4 :(得分:0)

你回错了。不要返回字典,传入一个键并返回值。

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

    return ""; // or some other value
}