CA1862: Büyük/küçük harfe duyarlı olmayan dize karşılaştırmaları gerçekleştirmek için 'StringComparison' yöntemi aşırı yüklemelerini kullanın

Özellik Değer
Kural Kimliği CA1862
Başlık Büyük/küçük harfe duyarlı olmayan dize karşılaştırmaları gerçekleştirmek için 'StringComparison' metodu aşırı yüklemelerini kullanın
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

Kod, iki dizeyi büyüklük/küçüklük fark etmeksizin karşılaştırmak için önce ToLower(), ToLowerInvariant(), ToUpper() veya ToUpperInvariant() çağrılır.

Kural açıklaması

Kod ToLower(), ToLowerInvariant(), ToUpper() veya ToUpperInvariant() çağırdığında bir ayırma gerçekleştirilir. Bu yöntemleri çağırmanın tek nedeni büyük/küçük harfe duyarsız dize karşılaştırması veya araması gerçekleştirmekse, ayırma gereksizdir. Bunun yerine, bir StringComparison alıp *IgnoreCase değerlerinden birini belirten bir dize karşılaştırma yöntemi çağırabilirsiniz.

İhlalleri düzeltme

ToLower(), ToLowerInvariant(), ToUpper() veya ToUpperInvariant() çağrısını kaldırın ve StringComparer yöntemlerinden birini veya StringComparison bağımsız değişkeni alan aşağıdaki yöntemlerden birini çağırın:

Not

  • Kodunuzu, StringComparison bağımsız değişken alan bir aşırı yükleme kullanacak şekilde değiştirirseniz, davranışta ince değişikliklere neden olabilir. Bu değişikliği yaparsanız veya Visual Studio ampul önerisini kabul ederseniz kapsamlı testler yapmanız önemlidir.
  • Dizelerin kültürel açıdan hassas bir şekilde karşılaştırılması gerekmiyorsa, StringComparison.OrdinalIgnoreCase geçirmeyi düşünün.

Örnek

Aşağıdaki örnekte kuralın ihlali gösterilmektedir:

string s1 = "aBc";
string s2 = "aBC";

int _ = s1.ToUpper().CompareTo(s2.ToUpper());
Dim s1 As String = "aBc"
Dim s2 As String = "aBC"

Dim i As Integer = s1.ToUpper().CompareTo(s2.ToUpper())

Aşağıdaki örnekte, ihlali düzelten kod gösterilmektedir:

string s1 = "aBc";
string s2 = "aBC";

int _ = StringComparer.CurrentCultureIgnoreCase.Compare(s1, s2);
Dim s1 As String = "aBc"
Dim s2 As String = "aBC"

Dim i As Integer = StringComparer.CurrentCultureIgnoreCase.Compare(s1, s2)

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

Performans önemli değilse, bu kuraldan gelen uyarıların gizlenmesi güvenlidir.

Entity Framework Core (EF Core) kullanıyorsanız, bir dizeyi karşılaştırarak veritabanını sorguladığınız senaryolar için bu kuralı gizlemeniz gerekir. EF Core, StringComparison bağımsız değişkeni alan String.Equals(String, StringComparison) gibi bir yöntem kullandığınızda bir hata (exception) fırlatır çünkü bu tür sorgular SQL'e çevrilemez. Daha fazla bilgi için bkz . Yerleşik .NET dize işlemlerinin çevirisi.

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 CA1862
// The code that's violating the rule is on this line.
#pragma warning restore CA1862

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.CA1862.severity = none

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