CA1854:首选 IDictionary.TryGetValue(TKey, out TValue) 方法

属性
规则 ID CA1854
标题 首选 IDictionary.TryGetValue(TKey, out TValue) 方法
类别 “性能”
修复是中断修复还是非中断修复 非中断
在 .NET 10 中默认启用 作为建议

原因

IDictionary 检查保护的 IDictionary.ContainsKey 元素访问。

规则说明

访问 IDictionary 的元素时,索引器实现会通过调用 IDictionary.ContainsKey 方法来检查 null 值。 如果还调用 IDictionary.ContainsKey 子句中的 if 来保护值查找,则会在只需要一个查找时执行两个查找。

如何解决冲突

IDictionary.ContainsKey 调用和元素访问替换为对 IDictionary.TryGetValue 方法的调用。

冲突

public string? GetValue(string key)
{
    if (_dictionary.ContainsKey(key))
    {
        return _dictionary[key];
    }

    return null;
}
Public Function GetValue(key As String) As String
    If _dictionary.ContainsKey(key) Then
        Return _dictionary(key)
    End If

    Return Nothing
End Function

修复:

public string? GetValue(string key)
{
    if (_dictionary.TryGetValue(key, out string? value))
    {
        return value;
    }

    return null;
}
Public Function GetValue(key As String) As String
    Dim value as String

    If _dictionary.TryGetValue(key, value) Then
        Return value
    End If

    Return Nothing
End Function

何时禁止显示警告

如果在执行 IDictionary 检查时使用 IDictionary.ContainsKey 的自定义实现来避免值查找,则可禁止显示此警告。

抑制警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

#pragma warning disable CA1854
// The code that's violating the rule is on this line.
#pragma warning restore CA1854

若要对文件、文件夹或项目禁用该规则,请在none中将其严重性设置为

[*.{cs,vb}]
dotnet_diagnostic.CA1854.severity = none

有关详细信息,请参阅如何禁止显示代码分析警告