CA1814: Lebih baik gunakan array berjajar daripada multidimensi

Properti Nilai
ID Aturan CA1814
Judul Disarankan untuk menggunakan array berjenjang dibandingkan dengan array multidimensi
Kategori Performa
Perbaikan bersifat merusak atau tidak merusak Merusak
Diaktifkan secara default di .NET 10 Tidak
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Elemen dinyatakan sebagai array multidimensi, yang dapat mengakibatkan pemborosan ruang untuk beberapa himpunan data.

Deskripsi aturan

Dalam array multidireksional, setiap elemen di setiap dimensi memiliki ukuran tetap yang sama dengan elemen lain dalam dimensi tersebut. Dalam array bergerigi, yang merupakan array dari array, setiap array internal dapat memiliki ukuran yang berbeda. Dengan menggunakan hanya ruang yang dibutuhkan untuk array tertentu, tidak ada ruang yang terbuang. Aturan ini, CA1814, merekomendasikan untuk beralih ke array berjatahan untuk menghemat memori.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran terhadap aturan ini, mengubah array multidimensi menjadi array berjajar.

Kapan harus menekan peringatan

Tidak apa-apa untuk menekan peringatan dari aturan ini jika array multidimensional tidak membuang ruang yang tidak perlu.

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 CA1814
// The code that's violating the rule is on this line.
#pragma warning restore CA1814

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

[*.{cs,vb}]
dotnet_diagnostic.CA1814.severity = none

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Contoh

Contoh berikut menunjukkan deklarasi untuk array bertingkat dan multidimensi.

Imports System

Public Class ArrayHolder
    Private jaggedArray As Integer()() =  {New Integer() {1, 2, 3, 4}, _
                                           New Integer() {5, 6, 7}, _
                                           New Integer() {8}, _
                                           New Integer() {9}}
    
    Private multiDimArray As Integer(,) =  {{1, 2, 3, 4}, _
                                            {5, 6, 7, 0}, _
                                            {8, 0, 0, 0}, _
                                            {9, 0, 0, 0}}
End Class
public class ArrayHolder
{
    int[][] jaggedArray = { new int[] {1,2,3,4},
                            new int[] {5,6,7},
                            new int[] {8},
                            new int[] {9}
                          };

    int[,] multiDimArray = {{1,2,3,4},
                             {5,6,7,0},
                             {8,0,0,0},
                             {9,0,0,0}
                            };
}