CA1814:与多维数组相比,首选使用交错数组

属性
规则 ID CA1814
标题 与多维数组相比,首选使用交错数组
类别 “性能”
修复是中断修复还是非中断修复 重大
在 .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}
                            };
}