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 9 | 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.
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.