Bagikan melalui


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