如果密钥不存在,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将引发KeyNotFound
exception。
如所暗示的, 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; } }