다음을 통해 공유


CA1864: 'IDictionary.TryAdd(TKey, TValue)' 메서드를 선호합니다.

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

원인

Dictionary<TKey,TValue>.AddDictionary<TKey,TValue>.ContainsKey(TKey) 호출에 의해 보호됩니다.

규칙 설명

Dictionary<TKey,TValue>.ContainsKey(TKey)Dictionary<TKey,TValue>.Add 모두 불필요한 조회를 수행합니다. Dictionary<TKey,TValue>.Add 또한 키가 딕셔너리에 이미 있는 경우 예외를 발생시킵니다. 값이 추가되었는지 여부를 나타내는 부울 값을 반환하는 호출 Dictionary<TKey,TValue>.TryAdd이 더 효율적입니다. TryAdd 는 키가 이미 있는 경우 키의 값을 덮어쓰지 않습니다.

위반 문제를 해결하는 방법

Dictionary<TKey,TValue>.ContainsKey(TKey)에 대한 호출 다음에 Dictionary<TKey,TValue>.Add에 대한 호출이 있을 경우, 이를 Dictionary<TKey,TValue>.TryAdd에 대한 단일 호출로 대체하십시오.

예시

다음 코드 조각은 CA1864 위반을 보여줍니다.

void Run(IDictionary<int, string> dictionary)
{
    if (!dictionary.ContainsKey(2))
    {
        dictionary.Add(2, "Hello World");
    }
}
Sub Run(dictionary As IDictionary(Of Integer, String))
    If Not dictionary.ContainsKey(2) Then
        dictionary.Add(2, "Hello World")
    End If
End Sub

다음 코드 조각은 이 위반을 해결합니다.

void Run(IDictionary<int, string> dictionary)
{
    dictionary.TryAdd(2, "Hello World");
}
Sub Run(dictionary As IDictionary(Of Integer, String))
    dictionary.TryAdd(2, "Hello World")
End Sub

경고를 표시하지 않는 경우

성능이 문제가 되지 않고 Dictionary<TKey,TValue>.Add에서 발생할 수 있는 예외를 처리하는 경우 이 경고를 무시해도 됩니다.

경고 표시 안 함

단일 위반을 억제하려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 비활성화한 후 다시 활성화하십시오.

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

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않으려면 구성 파일에서 none의 심각도를 설정합니다.

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

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