CA1820: Periksa string kosong dengan memeriksa panjang string

Properti Nilai
ID Aturan CA1820
Judul Uji teks kosong menggunakan panjang teks
Kategori Kinerja
Perbaikan ini merupakan kategori merusak atau tidak merusak Tidak Terputus
Diaktifkan secara default di .NET 10 Tidak
Bahasa yang berlaku C# dan Visual Basic

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 properti Length pada string null, Common Language Runtime menghasilkan 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 agar menggunakan metode IsNullOrEmpty.

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.");
        }
    }
}