Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
| Property | Ценность |
|---|---|
| Идентификатор правила | CA1878 |
| Заголовок | Предпочитать свойства ReadOnlySpan для полей массива чтения |
| Категория | Производительность |
| Исправление является разрушающим или неразрушающим | неразрывный |
| Включен по умолчанию в .NET 11 | Как предложение |
| Применимые языки | C# |
Причина
Частное статическое поле одномерного массива содержит поддерживаемые значения констант, и все наблюдаемые использование можно безопасно переписать для использования ReadOnlySpan<T> свойства.
Описание правила
Для поля статического массива для чтения требуется выделение управляемого массива. Когда свойство возвращает поддерживаемые ReadOnlySpan<T> константные данные, компилятор C# может снизить данные без выделения управляемого массива. Замена поля свойством может сократить выделение при сохранении доступа только для чтения к данным.
Анализатор поддерживает следующие типы элементов:
-
bool,byteиsbyteподдерживаются всякий раз, когда ReadOnlySpan<T> он доступен. -
short,ushort,charlongintfloatulonguintиdoubleподдерживаются только в том случае, если целевая компиляция предоставляет общедоступный статический RuntimeHelpers.CreateSpan<T>(RuntimeFieldHandle) метод. .NET 7 и более поздних ссылочных сборок предоставляют этот метод.
Анализатор не диагностировать массивы decimal, nintnuintтипы перечисления, произвольные структуры или ссылочные типы. Он также не диагностировать многомерные массивы или многомерные массивы.
Устранение нарушений
Замените поле массива свойством, возвращающим ReadOnlySpan<T>выражение.
Исправление кода перезаписывает подходящие значения использования поля. Для поддерживаемых AsSpan вызовов он удаляет избыточный вызов или заменяет вызов эквивалентной операцией диапазона, например Slice. Исправление кода не предлагается, если оно не может сохранить семантику каждого использования.
Example
В следующем фрагменте кода показано нарушение CA1878:
class CA1878ViolationExample
{
private static readonly byte[] Prefix = new byte[] { 0x50, 0x4B, 0x03, 0x04 };
public static ReadOnlySpan<byte> GetPrefix() => Prefix;
}
Следующий фрагмент кода исправляет нарушение.
class CA1878FixExample
{
private static ReadOnlySpan<byte> Prefix => new byte[] { 0x50, 0x4B, 0x03, 0x04 };
public static ReadOnlySpan<byte> GetPrefix() => Prefix;
}
Когда следует подавлять предупреждения
Подавляйте предупреждение, если вы намеренно сохраняете удостоверение массива или мутируемость, или если сохранение совместимости API требует, чтобы элемент оставался полем массива. Правило сообщает только частные статические поля чтения, которые могут быть безопасно перезаписаны.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1878
// The code that's violating the rule is on this line.
#pragma warning restore CA1878
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1878.severity = none
Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".