Bagikan melalui


CA1814: Lebih baik gunakan array berjajar daripada multidimensi

Properti Nilai
ID Aturan CA1814
Judul Utamakan array berjatuh daripada multidimensi
Golongan Performa
Perbaikan bersifat disruptif atau non-disruptif Merusak
Diaktifkan secara default di .NET 8 Tidak

Penyebab

Anggota dinyatakan sebagai array multidirektori, yang dapat mengakibatkan ruang terbuang 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 berjatahan, yang merupakan array array, setiap array dalam dapat memiliki ukuran yang berbeda. Dengan hanya menggunakan ruang yang diperlukan untuk array tertentu, tidak ada ruang yang terbuang sia-sia. Aturan ini, CA1814, merekomendasikan untuk beralih ke array berjatahan untuk menghemat memori.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran aturan ini, ubah array multididensi menjadi array berjatuhan.

Kapan harus menekan peringatan

Tidak apa-apa untuk menekan peringatan dari aturan ini jika array multididensi tidak membuang-buang ruang.

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 jagged dan multididensi.

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}
                            };
}