Bagikan melalui


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