从MSDN在Dictionary.TryGetValue方法上的条目:
此方法结合了ContainsKey方法和Item属性的功能。 如果找不到键,则value参数将为值类型TValue获取适当的默认值;否则,值为0。例如,对于整数类型,0(零),对于布尔类型,false(假),对于引用类型,null。 如果您的代码经常尝试访问不在字典中的键,请使用TryGetValue方法。使用此方法比捕获Item属性引发的KeyNotFoundException更有效。 此方法接近O(1)操作。
此方法结合了ContainsKey方法和Item属性的功能。
如果找不到键,则value参数将为值类型TValue获取适当的默认值;否则,值为0。例如,对于整数类型,0(零),对于布尔类型,false(假),对于引用类型,null。
如果您的代码经常尝试访问不在字典中的键,请使用TryGetValue方法。使用此方法比捕获Item属性引发的KeyNotFoundException更有效。
此方法接近O(1)操作。
从描述中,尚不清楚它是否比调用ContainsKey然后进行查找更有效或更方便。TryGetValue只是先调用ContainsKey然后再实现Item 的实现,还是实际上比通过一次查找更有效?
TryGetValue
换句话说,什么是更有效的(即哪个执行的查询更少):
Dictionary<int,int> dict; //...// int ival; if(dict.ContainsKey(ikey)) { ival = dict[ikey]; } else { ival = default(int); }
要么
Dictionary<int,int> dict; //...// int ival; dict.TryGetValue(ikey, out ival);
注意:我不是在寻找基准!
TryGetValue 会更快。
ContainsKey使用与相同的检查TryGetValue,该检查内部引用实际的输入位置。该Item属性实际上具有与几乎相同的代码功能TryGetValue,除了它将引发异常而不返回false。
ContainsKey
Item
使用,ContainsKey后跟Item基本上是重复的查找功能,在这种情况下,这是大部分计算。