CA1820: Uji string kosong menggunakan panjang string
Properti | Nilai |
---|---|
ID Aturan | CA1820 |
Judul | Uji string kosong menggunakan panjang string |
Golongan | Performa |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | No |
Penyebab
String dibandingkan dengan string kosong dengan menggunakan Object.Equals.
Deskripsi aturan
Membandingkan string menggunakan String.Length properti atau String.IsNullOrEmpty metode lebih cepat daripada menggunakan Equals. Ini karena Equals menjalankan instruksi CIL yang jauh lebih banyak daripada IsNullOrEmpty atau jumlah instruksi yang dijalankan untuk mengambil Length nilai properti dan membandingkannya dengan nol.
Untuk string null, Equals dan <string>.Length == 0
berulah secara berbeda. Jika Anda mencoba mendapatkan nilai Length properti pada string null, runtime bahasa umum melemparkan System.NullReferenceException. Jika Anda melakukan perbandingan antara string null dan string kosong, runtime bahasa umum tidak melemparkan pengecualian dan mengembalikan false
. Pengujian untuk null tidak secara signifikan memengaruhi performa relatif dari kedua pendekatan ini. Saat menargetkan .NET Framework 2.0 atau yang lebih baru, gunakan metode .IsNullOrEmpty Jika tidak, gunakan perbandingan Length == 0 jika memungkinkan.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran aturan ini, ubah perbandingan IsNullOrEmpty untuk menggunakan metode .
Kapan harus menekan peringatan
Aman untuk menekan peringatan dari aturan ini jika performa bukan masalah.
Menyembunyikan peringatan
Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.
#pragma warning disable CA1820
// The code that's violating the rule is on this line.
#pragma warning restore CA1820
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1820.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Contoh
Contoh berikut mengilustrasikan berbagai teknik yang digunakan untuk mencari string kosong.
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.");
}
}
}