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 | CA2245 |
| Judul | Jangan tetapkan properti pada dirinya sendiri |
| Kategori | Penggunaan |
| 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 ditetapkan pada dirinya sendiri.
Deskripsi aturan
Pengkompilasi C# menghasilkan peringatan CS1717: Penugasan yang dibuat ke variabel yang sama; apakah Anda bermaksud menetapkan sesuatu yang lain? ketika simbol bidang, lokal, atau parameter ditetapkan ke dirinya sendiri. Kesalahan seperti itu umum terjadi ketika simbol lokal, parameter, atau bidang memiliki nama yang mirip dengan simbol lain dalam cakupan. Alih-alih menggunakan simbol yang berbeda di sisi kiri dan kanan tugas, simbol yang sama digunakan di kedua sisi. Ini mengarah pada penetapan nilai yang berlebihan untuk dirinya sendiri dan umumnya menunjukkan bug fungsional.
Menetapkan properti ke dirinya sendiri juga merupakan bug fungsional serupa untuk sebagian besar kasus dunia nyata. Namun, dalam beberapa kasus sudut yang sangat ekstrem, mengambil nilai dari suatu properti dapat memiliki efek samping dan nilai baru dari properti tersebut berbeda dari nilai aslinya. Jika demikian, penugasan mandiri properti tidak berlebihan dan tidak dapat dihapus. Ini mencegah pengompilasi menghasilkan CS1717 peringatan untuk penugasan mandiri properti, tanpa memperkenalkan perubahan yang melanggar untuk kasus-kasus ini.
Aturan CA2245 bertujuan untuk mengisi kesenjangan ini. Ini melaporkan pelanggaran terkait pengalokasian properti ke diri sendiri untuk membantu memperbaiki bug fungsional ini. Untuk sejumlah kecil kasus tepi di mana penetapan sendiri pada properti diinginkan, CA2245 pelanggaran dapat diabaikan di dalam kode sumber dengan komentar justifikasi yang tepat.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran, gunakan simbol yang berbeda di sisi kiri dan sisi kanan penugasan. Misalnya, cuplikan kode berikut menunjukkan pelanggaran aturan dan cara memperbaikinya:
public class C
{
private int p = 0;
public int P { get; private set; }
public void M(int p)
{
// CS1717: Accidentally assigned the parameter 'p' to itself.
p = p;
// CA2245: Accidentally assigned the property 'P' to itself.
P = P;
}
}
public class C
{
private int p = 0;
public int P { get; private set; }
public void M(int p)
{
// No violation, now the parameter is assigned to the field.
this.p = p;
// No violation, now the parameter is assigned to the property.
P = p;
}
}
Kapan harus menekan peringatan
Aman untuk menekan pelanggaran dari aturan ini jika mengambil nilai properti dapat memiliki efek samping dan nilai baru properti berbeda dari nilai aslinya. Jika demikian, penugasan mandiri properti tidak berlebihan. Komentar justifikasi harus ditambahkan ke supresi untuk mendokumentasikan ini sebagai perilaku yang diharapkan.
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 CA2245
// The code that's violating the rule is on this line.
#pragma warning restore CA2245
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA2245.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Aturan terkait
- CS1717: Penugasan dibuat ke variabel yang sama; Apakah Anda bermaksud untuk menetapkan sesuatu yang lain?
- CA2011: Jangan tetapkan properti di dalam metode setternya
- CA2246: Jangan tetapkan simbol dan anggota simbol dalam pernyataan yang sama