我最近才注意到Dictionary.TryGetValue(TKey key, out TValue value)
,并且好奇哪种方法是从Dictionary中检索值的更好方法。
传统上我做过:
if (myDict.Contains(someKey))
someVal = myDict[someKey];
...
除非我知道它必须在里面。
这样做是否更好:
if (myDict.TryGetValue(somekey, out someVal)
...
哪个更好的做法?一个比另一个快吗?我想像一下,Try版本会变慢,因为它会“吞并”内部的try/catch并将其用作逻辑,不是吗?
最佳答案
TryGetValue稍快一些,因为FindEntry仅被调用一次。
仅供引用:实际上并没有发现错误。
它在打电话:
public bool TryGetValue(TKey key, out TValue value)
{
int index = this.FindEntry(key);
if (index >= 0)
{
value = this.entries[index].value;
return true;
}
value = default(TValue);
return false;
}
ContainsKey是这样的:
public bool ContainsKey(TKey key)
{
return (this.FindEntry(key) >= 0);
}