Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | 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}
};
}