CA2245: Jangan tetapkan properti untuk properti itu sendiri
Properti | Nilai |
---|---|
ID Aturan | CA2245 |
Judul | Jangan tetapkan properti ke dirinya sendiri |
Golongan | Penggunaan |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | Sebagai saran |
Penyebab
Properti secara tidak sengaja ditetapkan untuk properti itu 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 fungsi serupa untuk hampir semua kasus dunia nyata. Namun, dalam beberapa kasus sudut ekstrem, mengambil nilai properti dapat memiliki efek samping dan nilai baru properti 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 untuk penugasan mandiri properti untuk membantu memperbaiki bug fungsi ini. Untuk serangkaian kecil kasus sudut di mana penugasan sendiri properti diinginkan, CA2245
pelanggaran dapat ditekan di sumber dengan komentar pembenaran yang sesuai.
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 pengaturan properti
- CA2246: Jangan tetapkan simbol dan anggota simbol dalam pernyataan yang sama