Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
| Propiedad | Value |
|---|---|
| Identificador de la regla | CA1878 |
| Title | Preferir propiedades ReadOnlySpan sobre campos de matriz de solo lectura |
| Categoría | Rendimiento |
| La corrección es disruptiva o no disruptiva | Non-breaking |
| Habilitado de forma predeterminada en .NET 11 | Como sugerencia |
| Idiomas aplicables | C# |
Causa
Un campo de matriz unidimensional estática privada contiene valores constantes admitidos y todos los usos observados se pueden volver a escribir de forma segura para usar una ReadOnlySpan<T> propiedad .
Descripción de la regla
Un campo de matriz estática de solo lectura requiere una asignación de matriz administrada. Cuando una ReadOnlySpan<T> propiedad devuelve datos constantes admitidos, el compilador de C# puede reducir los datos sin asignar una matriz administrada. Reemplazar el campo por una propiedad puede reducir las asignaciones al tiempo que se conserva el acceso de solo lectura a los datos.
El analizador admite los siguientes tipos de elementos:
-
bool,byteysbytese admiten siempre que ReadOnlySpan<T> esté disponible. -
shortSolo se admiten ,ushort,longuintintfloat,ulongydoublecuando la compilación de destino expone el método estático RuntimeHelpers.CreateSpan<T>(RuntimeFieldHandle) público.char.NET 7 y los ensamblados de referencia posteriores exponen este método.
El analizador no diagnostica matrices de tipos de decimalenumeración , nint, nuint, estructuras arbitrarias o tipos de referencia. Tampoco diagnostica matrices escalonadas ni matrices multidimensionales.
Cómo corregir infracciones
Reemplace el campo de matriz por una propiedad con forma de expresión que devuelve ReadOnlySpan<T>.
La corrección de código vuelve a escribir los usos aptos del campo. En el caso de las llamadas admitidas AsSpan , quita una llamada redundante o reemplaza la llamada por una operación de intervalo equivalente, como Slice. La corrección de código no se ofrece cuando no puede conservar la semántica de cada uso.
Example
El fragmento de código siguiente muestra una infracción de CA1878:
class CA1878ViolationExample
{
private static readonly byte[] Prefix = new byte[] { 0x50, 0x4B, 0x03, 0x04 };
public static ReadOnlySpan<byte> GetPrefix() => Prefix;
}
El siguiente fragmento de código corrige la infracción:
class CA1878FixExample
{
private static ReadOnlySpan<byte> Prefix => new byte[] { 0x50, 0x4B, 0x03, 0x04 };
public static ReadOnlySpan<byte> GetPrefix() => Prefix;
}
Cuándo suprimir las advertencias
Suprima una advertencia si conserva intencionadamente la identidad o la mutabilidad de la matriz, o si la conservación de la compatibilidad de la API requiere que el miembro siga siendo un campo de matriz. La regla solo notifica campos de solo lectura estáticos privados cuyos usos observados se pueden volver a escribir de forma segura.
Supresión de una advertencia
Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.
#pragma warning disable CA1878
// The code that's violating the rule is on this line.
#pragma warning restore CA1878
Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad a none en el archivo de configuración.
[*.{cs,vb}]
dotnet_diagnostic.CA1878.severity = none
Para obtener más información, consulte Cómo suprimir advertencias de análisis de código.