前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CA1841:首选字典包含方法

CA1841:首选字典包含方法

作者头像
呆呆
发布2022-02-26 08:36:31
3000
发布2022-02-26 08:36:31
举报
文章被收录于专栏:centosDaicentosDai

规则 ID

CA1841

类别

“性能”

修复是中断修复还是非中断修复

非中断

原因

此规则可找到在 IDictionary<TKey,TValue> 的 Keys 或 Values 集合上对 Contains 方法的调用,这些调用可替换为在字典本身对 ContainsKey 或 ContainsValue 方法的调用。

规则说明

对 Keys 或 Values 集合调用 Contains 通常比对字典本身调用 ContainsKey 或 ContainsValue 开销更高:

许多字典实现会延迟对键值集合的实例化,这意味着访问 Keys 或 Values 集合可能导致额外的分配。

如果键/值集合使用显式接口实现来隐藏 ICollection<T> 上的方法,可能最终会对 IEnumerable<T> 上调用扩展方法。 这可能会降低性能,尤其是在访问键集合时。 大多数字典实现都能为键提供快速的 O(1) 包含检查,而 IEnumerable<T> 上的 Contains 扩展方法通常执行较慢的 O(n) 包含检查。

如何解决冲突

若要解决冲突,请将对 dictionary.Keys.Contains 或 dictionary.Values.Contains 的调用分别替换为对 dictionary.ContainsKey 或 dictionary.ContainsValue 的调用。

下面的代码片段显示了冲突示例及其解决方法。

代码语言:javascript
复制
using System.Collections.Generic;
// Importing this namespace brings extension methods for IEnumerable<T> into scope.
using System.Linq;
class Example
{
    void Method()
    {
        var dictionary = new Dictionary<string, int>();
        //  Violation
        dictionary.Keys.Contains("hello world");
        //  Fixed
        dictionary.ContainsKey("hello world");
        //  Violation
        dictionary.Values.Contains(17);
        //  Fixed
        dictionary.ContainsValue(17);
    }
}
Imports System.Collection.Generic
' Importing this namespace brings extension methods for IEnumerable(Of T) into scope.
' Note that in Visual Basic, this namespace is often imported automatically throughout the project.
Imports System.Linq
Class Example
    Private Sub Method()
        Dim dictionary = New Dictionary(Of String, Of Integer)
        ' Violation
        dictionary.Keys.Contains("hello world")
        ' Fixed
        dictionary.ContainsKey("hello world")
        ' Violation
        dictionary.Values.Contains(17)
        ' Fixed
        dictionary.ContainsValue(17)
    End Sub
End Class

何时禁止显示警告

如果有问题的代码不会对性能造成重大影响,可安全地禁止显示此规则发出的警告。

另请参阅

性能规则

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档