CA1834: Usar StringBuilder.Append(char) para cadenas de un solo carácter

Propiedad Value
Identificador de la regla CA1834
Título Usar StringBuilder.Append(char) para cadenas de un solo carácter
Categoría Rendimiento
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 Como sugerencia

Causa

Esta regla se desencadena cuando se pasa una cadena de longitud de unidad al método Append.

Descripción de la regla

Al llamar a StringBuilder.Append con una cadena de longitud de unidad, considere la posibilidad de usar un const char en lugar de una longitud de unidad const string para mejorar el rendimiento.

Cómo corregir infracciones

La infracción se puede corregir manualmente o, en algunos casos, se pueden usar acciones rápidas para corregir el código en Visual Studio. Ejemplos:

Ejemplo 1

Invocaciones de StringBuilder.Append con un literal de cadena de longitud de unidad:

using System;
using System.Text;

namespace TestNamespace
{
    class TestClass
    {
        private void TestMethod()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("a");
        }
    }
}

Sugerencia

Hay disponible una corrección de código para esta regla en Visual Studio. Para usarla, coloque el cursor sobre la infracción y presione Ctrl+. (punto) Elija Considerar el uso de "StringBuilder.Append(char)" cuando corresponda en la lista de opciones que se presentan.

Code fix for CA1834 - Use StringBuilder.Append(char) for single character strings

Corrección aplicada por Visual Studio:

using System;
using System.Text;

namespace TestNamespace
{
    class TestClass
    {
        private void TestMethod()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append('a');
        }
    }
}

En algunos casos, por ejemplo, cuando se usa un campo de clase de longitud de unidad const string, Visual Studio no sugiere una corrección de código (pero el analizador se sigue activando). Estas instancias requieren una corrección manual.

Ejemplo 2

Invocaciones de StringBuilder.Append con un campo de clase de longitud de unidad const string:

using System;
using System.Text;

namespace TestNamespace
{
    public class Program
    {
        public const string unitString = "a";

        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(unitString);
        }
    }
}

Después del análisis minucioso, unitString aquí se puede cambiar a un char sin provocar errores de compilación.

using System;
using System.Text;

namespace TestNamespace
{
    public class Program
    {
        public const char unitString = 'a';

        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(unitString);
        }
    }
}

Cuándo suprimir las advertencias

Es seguro suprimir una infracción de esta regla si no le preocupa la mejora de rendimiento al usar StringBuilder.

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 CA1834
// The code that's violating the rule is on this line.
#pragma warning restore CA1834

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

[*.{cs,vb}]
dotnet_diagnostic.CA1834.severity = none

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Vea también