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
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Öneri olarak
Geçerli diller C# ve Visual Basic

Neden

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

Kural açıklaması

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

İhlalleri düzeltme

IDictionary.ContainsKey çağrısını ve öğe erişimini bir IDictionary.TryGetValue yöntemi çağrısı ile 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?

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

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.