Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| 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.