【问题标题】:Unnecessary null check in KeyedCollection<TKey, TItem>.Contains(TKey)KeyedCollection<TKey, TItem>.Contains(TKey) 中不必要的空值检查
【发布时间】:2009-07-30 06:31:47
【问题描述】:

刚刚在 KeyedCollection.Contains(TKey) 中发现了一个不必要的空检查。

感谢这只是一个很小的优化,但不应该认为这种低效率会被自动代码分析工具发现吗?

这是反射器生成的C#:

public bool Contains(TKey key)
{
    if (key == null)
    {
        ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
    }
    if (this.dict != null)
    {
        return this.dict.ContainsKey(key);
    }
    if (key != null) // Not needed as key cannot be null
    {
        foreach (TItem local in base.Items)
        {
            if (this.comparer.Equals(this.GetKeyForItem(local), key))
            {
                return true;
            }
        }
    }
    return false;
}

另外,发送补丁的最佳方式是什么? ;-) 通过.net forums 或?

【问题讨论】:

    标签: .net .net-bcl


    【解决方案1】:

    无论如何,这可能会被 JIT 优化,所以你真的不需要担心它。无论如何,空检查的成本接近于零。

    要报告错误,您可以使用 Microsoft Connect 网站。但我不认为他们会解决它...

    【讨论】:

    • 在现代 cpu 上,它的分支预测也非常好,所以实际上它可能实际上几乎没有区别,即使没有被淘汰......
    • 如果可以被 JIT 淘汰,那么代码分析工具不应该也能把它捡起来吗?
    • 因为这是问题的一半:)
    猜你喜欢
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2012-08-14
    • 1970-01-01
    相关资源
    最近更新 更多