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 | CA1861 |
| Judul | Hindari array yang tetap sebagai argumen |
| Kategori | Performa |
| Perbaikan bersifat merusak atau tidak merusak | Tidak terputus |
| Diaktifkan secara default di .NET 10 | Sebagai saran |
| Bahasa yang berlaku | C# dan Visual Basic |
Penyebab
Array konstanta nilai harfiah diteruskan ke metode melalui pemanggilan reguler atau pemanggilan metode ekstensi.
Deskripsi aturan
Array konstanta yang diteruskan sebagai argumen tidak digunakan kembali saat dipanggil berulang kali, yang menyiratkan array baru dibuat setiap kali. Jika array yang dilewatkan tidak dimutasi dalam method yang dipanggil, pertimbangkan untuk mengekstraknya ke static readonly bidang untuk meningkatkan performa.
Catatan
Jika metode yang dipanggil mengubah array yang diteruskan atau jika Anda tidak yakin apakah metode akan mengubah array, jangan ekstrak array ke static readonly bidang. Melakukannya bisa menjadi perubahan besar. Dalam hal ini, lebih baik menekan peringatan sebagai gantinya.
Cara memperbaiki pelanggaran
Ekstrak array konstanta ke field static readonly jika array yang dilewatkan tidak diubah dalam metode yang dipanggil.
Contoh berikut menunjukkan pelanggaran aturan:
// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})
Contoh berikut menunjukkan bagaimana pelanggaran aturan ini diperbaiki dengan mengekstrak argumen ke static readonly bidang.
private static readonly string[] array = new[] { "Hello" , "world!" };
private string GetMessage()
{
return string.Join(" ", array);
}
Private Shared ReadOnly array As String() = {"Hello", "world!"}
Private Function GetMessage() As String
Return String.Join(" ", array)
End Function
Sekarang, nilai array ditentukan pada waktu kompilasi daripada pada waktu runtime, meningkatkan performa kode.
Kapan harus menekan peringatan
Abaikan pelanggaran aturan ini jika:
- Pemanggilan hanya berjalan sekali.
- Array dapat dimutasi dalam metode yang dipanggil, atau Anda tidak yakin apakah akan bermutasi.
- Anda tidak khawatir tentang dampak performa dari pembuatan array konstan untuk setiap pemanggilan.
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 CA1861
// The code that's violating the rule is on this line.
#pragma warning restore CA1861
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1861.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.