CA1861: Hindari array konstanta sebagai argumen
Properti | Nilai |
---|---|
ID Aturan | CA1861 |
Judul | Hindari array konstanta sebagai argumen |
Golongan | Performa |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | Sebagai saran |
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 metode yang disebut, 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 yang melanggar. Dalam hal ini, lebih baik menekan peringatan sebagai gantinya.
Cara memperbaiki pelanggaran
Ekstrak array konstanta ke static readonly
bidang jika array yang dilewatkan tidak bermutasi dalam metode yang disebut.
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 diselesaikan pada waktu kompilasi daripada pada waktu proses, membuat kode lebih berkinerja.
Kapan harus menekan peringatan
Tekan 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 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.