从 MSDN 关于Dictionary.TryGetValue Method的条目:
此方法结合了 ContainsKey 方法和 Item 属性的功能。 如果没有找到该键,则 value 参数获取值类型 TValue 的适当默认值;例如,整数类型为 0(零),布尔类型为 false,引用类型为 null。 如果您的代码经常尝试访问不在字典中的键,请使用 TryGetValue 方法。使用此方法比捕获 Item 属性抛出的 KeyNotFoundException 更有效。 此方法接近 O(1) 操作。
此方法结合了 ContainsKey 方法和 Item 属性的功能。
如果没有找到该键,则 value 参数获取值类型 TValue 的适当默认值;例如,整数类型为 0(零),布尔类型为 false,引用类型为 null。
如果您的代码经常尝试访问不在字典中的键,请使用 TryGetValue 方法。使用此方法比捕获 Item 属性抛出的 KeyNotFoundException 更有效。
此方法接近 O(1) 操作。
从描述中,不清楚它是否比调用 ContainsKey 然后进行查找更有效或更方便。只是调用 ContainsKey 然后 Item的实现TryGetValue还是实际上比通过单个查找更有效?
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基本上复制了查找功能,在这种情况下,这是计算的大部分。