如果密钥不存在,C#Dictionary <int,int>查找会发生什么?

我试图检查null,但编译器警告说,这种情况将永远不会发生。 我该找什么?

假设你想得到这个值,如果键存在的话,使用Dictionary<TKey, TValue>.TryGetValue

 int value; if (dictionary.TryGetValue(key, out value)) { // Key was in dictionary; "value" contains corresponding value } else { // Key wasn't in dictionary; "value" is now 0 } 

(使用ContainsKey然后索引器使它看起来是关键的两次,这是非常没有意义的。)

请注意,即使您正在使用引用types,检查null也不会起作用 – 如果您请求丢失的键而不是返回null,则Dictionary<,>的索引器将引发exception。 (这是Dictionary<,>Hashtable之间的很大区别。)

如果字典不包含您的密钥,Dictionary将引发KeyNotFoundexception。

如所暗示的, ContainsKey是适当的预防措施。 TryGetValue也是有效的。

这允许字典更有效地存储空值。 如果没有这样的行为,检查[]运算符的空结果将指示空值或input密钥的不存在,这是不好的。

如果您只是在尝试添加新值之前进行检查,请使用ContainsKey方法:

 if (!openWith.ContainsKey("ht")) { openWith.Add("ht", "hypertrm.exe"); } 

如果您正在检查该值是否存在,请使用Jon Skeet的答案中所述的TryGetValue方法。

你应该检查Dictionary.ContainsKey(int键),然后再尝试拉出值。

 Dictionary<int, int> myDictionary = new Dictionary<int, int>(); myDictionary.Add(2,4); myDictionary.Add(3,5); int keyToFind = 7; if(myDictionary.ContainsKey(keyToFind)) { myValueLookup = myDictionay[keyToFind]; // do work... } else { // the key doesn't exist. } 

ContainsKey是你在找什么。

你应该可以使用:

 if(myDictionary.ContainsKey(someInt)) { // do something } 

你不能检查null的原因是这里的关键是一个值types。

助手类是方便的:

 public static class DictionaryHelper { public static TVal Get<TKey, TVal>(this Dictionary<TKey, TVal> dictionary, TKey key, TVal defaultVal = default(TVal)) { TVal val; if( dictionary.TryGetValue(key, out val) ) { return val; } return defaultVal; } }