CA1854: 메서드를 선호합니다 IDictionary.TryGetValue(TKey, out TValue) .

속성
규칙 ID CA1854
타이틀 메서드 선호 IDictionary.TryGetValue(TKey, out TValue)
범주 성능
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 제안 사항

원인

IDictionary 검사 의해 IDictionary.ContainsKey 보호되는 요소 액세스입니다.

규칙 설명

요소에 IDictionary 액세스하면 인덱서 구현은 메서드를 호출 IDictionary.ContainsKey 하여 null 값에 대한 검사. 또한 절에서 if 호출 IDictionary.ContainsKey 하여 값 조회를 보호하면 하나만 필요할 때 두 개의 조회가 수행됩니다.

위반 문제를 해결하는 방법

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

Fix:

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.ContainsKey 때 값 조회를 방지하는 사용자 지정 구현 IDictionary 을 사용하는 경우 이 경고를 표시하지 않아도 됩니다.

경고 표시 안 함

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

#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

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.