CA1820: Dize uzunluğunu kullanarak boş dizeler için sınayın
Özellik | Değer |
---|---|
Kural Kimliği | CA1820 |
Başlık | Dize uzunluğunu kullanarak boş dizeleri test edin |
Kategori | Performans |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Hayır |
Neden
Bir dize, kullanılarak Object.Equalsboş dizeyle karşılaştırılır.
Kural açıklaması
özelliğini veya String.IsNullOrEmpty yöntemini kullanarak String.Length dizeleri karşılaştırmak, kullanmaktan Equalsdaha hızlıdır. Bunun nedeni Equals , özellik değerini almak ve sıfırla karşılaştırmak için yürütülen yönergelerin sayısından çok daha fazla IsNullOrEmpty CIL yönergesi yürütmesidir Length .
Null dizeler Equals için ve <string>.Length == 0
farklı davran. Null dizede özelliğinin Length değerini almaya çalışırsanız, ortak dil çalışma zamanı bir System.NullReferenceExceptionoluşturur. Null dize ile boş dize arasında bir karşılaştırma gerçekleştirirseniz, ortak dil çalışma zamanı bir özel durum oluşturmaz ve döndürür false
. Null testi, bu iki yaklaşımın göreli performansını önemli ölçüde etkilemez. .NET Framework 2.0 veya sonraki bir sürümü hedeflerken yöntemini kullanın IsNullOrEmpty . Aksi takdirde mümkün olduğunda == 0 karşılaştırmasını Length kullanın.
İhlalleri düzeltme
Bu kuralın ihlalini düzeltmek için karşılaştırmayı yöntemini kullanacak şekilde IsNullOrEmpty değiştirin.
Uyarıların ne zaman bastırılması gerekiyor?
Performans sorun değilse, bu kuraldan gelen bir uyarıyı engellemek 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 CA1820
// The code that's violating the rule is on this line.
#pragma warning restore CA1820
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.CA1820.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Örnek
Aşağıdaki örnekte, boş bir dize aramak için kullanılan farklı teknikler gösterilmektedir.
public class StringTester
{
string s1 = "test";
public void EqualsTest()
{
// Violates rule: TestForEmptyStringsUsingStringLength.
if (s1 == "")
{
Console.WriteLine("s1 equals empty string.");
}
}
// Use for .NET Framework 1.0 and 1.1.
public void LengthTest()
{
// Satisfies rule: TestForEmptyStringsUsingStringLength.
if (s1 != null && s1.Length == 0)
{
Console.WriteLine("s1.Length == 0.");
}
}
// Use for .NET Framework 2.0.
public void NullOrEmptyTest()
{
// Satisfies rule: TestForEmptyStringsUsingStringLength.
if (!String.IsNullOrEmpty(s1))
{
Console.WriteLine("s1 != null and s1.Length != 0.");
}
}
}