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 9'da 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 none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1854.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.