CA1861: Hindari array yang konstan sebagai parameter

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.