CA1854: Yöntemini tercih edin IDictionary.TryGetValue(TKey, out TValue)

Özellik Değer
Kural Kimliği CA1854
Başlık Yöntemini tercih edin IDictionary.TryGetValue(TKey, out TValue)
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

Denetim IDictionary tarafından korunan bir IDictionary.ContainsKey öğe erişimi.

Kural açıklaması

öğesinin IDictionary bir öğesine erişildiğinde, dizin oluşturucu uygulaması yöntemini çağırarak IDictionary.ContainsKey null değeri denetler. Bir değer aramasını korumak için yan if tümcesini de çağırırsanızIDictionary.ContainsKey, yalnızca bir arama gerektiğinde iki arama gerçekleştirilir.

İhlalleri düzeltme

IDictionary.ContainsKey çağırma ve öğe erişimini yöntemine IDictionary.TryGetValue yapılan bir çağrıyla değiştirin.

İhlal:

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

Düzeltme:

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

Uyarıların ne zaman bastırılması gerekiyor?

Denetimi gerçekleştirirken değer aramasını önleyen bir özel uygulaması IDictionary kullanıyorsanız bu uyarıyı gizlemeniz güvenlidir IDictionary.ContainsKey .

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

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

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

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

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.