CA2011: Jangan menetapkan nilai properti di dalam setternya

Properti Nilai
ID Aturan CA2011
Judul Jangan menetapkan properti di dalam metode setter-nya
Kategori Keandalan
Perbaikan bersifat merusak atau tidak merusak Tidak terputus
Diaktifkan secara default di .NET 10 Sebagai saran
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Properti secara tidak sengaja diberi nilai dalam pengakses kumpulan properti itu sendiri.

Deskripsi aturan

Menetapkan properti pada dirinya sendiri di aksesor pengaturan mengarah ke rantai panggilan rekursif tak terbatas ke aksesor pengaturan. Ini menghasilkan StackOverflowException pada waktu proses. Kesalahan seperti itu umum terjadi ketika properti dan bidang pendukung untuk menyimpan nilai properti memiliki nama yang mirip. Bukannya menetapkan nilai ke field pendukung, nilai tersebut secara tidak sengaja ditetapkan ke properti itu sendiri.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran, ganti penetapan yang melanggar ke properti dengan penugasan ke bidang backing atau beralih menggunakan properti otomatis. Misalnya, cuplikan kode berikut menunjukkan pelanggaran aturan dan beberapa cara untuk memperbaikinya:

public class C
{
    // Backing field for property 'P'
    private int p;

    public int P
    {
        get
        {
            return p;
        }
        set
        {
            // CA2011: Accidentally assigned to property, instead of the backing field.
            P = value;
        }
    }
}
public class C
{
    // Backing field for property 'P'
    private int _p;

    public int P
    {
        get
        {
            return _p;
        }
        set
        {
            // Option 1: Assign to backing field and rename the backing field for clarity.
            _p = value;
        }
    }
}
public class C
{
    // Option 2: Use auto-property.
    public int P { get; set; }
}

Kapan harus menekan peringatan

Tidak masalah untuk mengabaikan pelanggaran dari aturan ini jika Anda yakin bahwa panggilan rekursif ke pengakses set dijaga secara kondisional untuk mencegah rekursi tak terbatas.

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

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

[*.{cs,vb}]
dotnet_diagnostic.CA2011.severity = none

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Lihat juga