CA2245: Jangan tetapkan properti kepada dirinya sendiri

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.

Lihat juga