CA2246: Jangan tetapkan simbol dan anggota simbol dalam pernyataan yang sama
Properti | Nilai |
---|---|
ID Aturan | CA2246 |
Judul | Jangan menetapkan simbol dan anggotanya dalam pernyataan yang sama |
Golongan | Penggunaan |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 8 | Sebagai saran |
Penyebab
Simbol dan anggotanya ditetapkan dalam pernyataan yang sama. Misalnya:
// 'a' and 'a.Field' are assigned in the same statement
a.Field = a = b;
Deskripsi aturan
Menetapkan simbol dan anggota simbol, yaitu bidang atau properti, dalam pernyataan yang sama tidak disarankan. Tidak jelas apakah akses anggota dimaksudkan untuk menggunakan nilai lama simbol sebelum penetapan atau nilai baru dari penetapan dalam pernyataan ini. Untuk kejelasan, pernyataan multi-tugas harus dibagi menjadi dua atau beberapa pernyataan penugasan sederhana.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran, pisahkan pernyataan multi-tugas menjadi dua pernyataan penetapan sederhana atau lebih. Misalnya, cuplikan kode berikut menunjukkan pelanggaran aturan dan beberapa cara untuk memperbaikinya berdasarkan niat pengguna:
public class C
{
public C Field;
}
public class Test
{
public void M(C a, C b)
{
// Let us assume 'a' points to 'Instance1' and 'b' points to 'Instance2' at the start of the method.
// It is not clear if the user intent in the below statement is to assign to 'Instance1.Field' or 'Instance2.Field'.
// CA2246: Symbol 'a' and its member 'Field' are both assigned in the same statement. You are at risk of assigning the member of an unintended object.
a.Field = a = b;
}
}
public class C
{
public C Field;
}
public class Test
{
public void M(C a, C b)
{
// Let us assume 'a' points to 'Instance1' and 'b' points to 'Instance2' at the start of the method.
// 'Instance1.Field' is intended to be assigned.
var instance1 = a;
a = b;
instance1.Field = a;
}
}
public class C
{
public C Field;
}
public class Test
{
public void M(C a, C b)
{
// Let us assume 'a' points to 'Instance1' and 'b' points to 'Instance2' at the start of the method.
// 'Instance2.Field' is intended to be assigned.
a = b;
b.Field = a; // or 'a.Field = a;'
}
}
Kapan harus menekan peringatan
Jangan menekan pelanggaran dari aturan ini.
Aturan terkait
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk