CA1814:複数次元の配列ではなくジャグ配列を使用します

プロパティ
ルール ID CA1814
Title 複数次元の配列ではなくジャグ配列を使用します
[カテゴリ] パフォーマンス
修正が中断ありか中断なしか あり
.NET 8 では既定で有効 いいえ

原因

メンバーが複数次元の配列として宣言されているため、一部のデータ セットで無駄な領域が発生している可能性があります。

規則の説明

複数次元の配列では、各次元の各要素のサイズは固定で、その次元内の他の要素と同じです。 配列の配列であるジャグ配列では、各内部配列を異なるサイズにすることができます。 特定の配列に必要な領域のみを使用することにより、無駄な領域は発生しません。 この規則 CA1814 では、メモリを節約するためにジャグ配列に切り替えることを推奨します。

違反の修正方法

この規則の違反を修正するには、複数次元の配列をジャグ配列に変更します。

どのようなときに警告を抑制するか

複数次元の配列によって無駄な領域が発生しない場合は、この規則による警告を抑制できます。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA1814
// The code that's violating the rule is on this line.
#pragma warning restore CA1814

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

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

詳細については、「コード分析の警告を抑制する方法」を参照してください。

次の例は、ジャグ配列と複数次元の配列の宣言を示しています。

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