我最近才注意到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);
}

10-06 06:44