Бөлісу құралы:


CA1814: используйте ступенчатые массивы вместо многомерных

Свойство Значение
Идентификатор правила CA1814
Заголовок Используйте массивы массивов вместо многомерных массивов
Категория Производительность
Исправление является критическим или не критическим Срочное
Включен по умолчанию в .NET 10 Нет
Применимые языки C# и Visual Basic

Причина

Элемент объявляется как многомерный массив, что может привести к напрасному расходу пространства для некоторых наборов данных.

Описание правила

В многомерном массивекаждый элемент в каждом измерении имеет тот же фиксированный размер, что и другие элементы в этом измерении. В ступенчатом массиве, который представляет собой массив массивов, внутренние массивы могут быть разного размера. При использовании только пространства, необходимого для данного массива, не происходит напрасной траты пространства. Правило 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}
                            };
}