다음을 통해 공유


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

속성
규칙 ID CA1854
제목 IDictionary.TryGetValue(TKey, out TValue) 메서드를 선호하시기 바랍니다
범주 성능
수정 사항이 호환성을 깨뜨리는지 여부 또는 무중단인지 여부 주요 변경 아님
.NET 10에서 기본적으로 사용하도록 설정 제안 사항
적용 가능한 언어 C# 및 Visual Basic

원인

IDictionary 요소 액세스는 IDictionary.ContainsKey 검사로 보호됩니다.

규칙 설명

IDictionary의 요소에 액세스할 때, 인덱서 구현에서는 IDictionary.ContainsKey 메서드를 호출하여 null인지 확인합니다. 절에서 ifIDictionary.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 때 값 조회를 방지하는 사용자 지정 구현 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

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