Bagikan melalui


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 8 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.

Baca juga