CA1802: Usar literales cuando resulte apropiado
TypeName |
UseLiteralsWhereAppropriate |
Identificador de comprobación |
CA1802 |
Categoría |
Microsoft.Performance |
Cambio problemático |
Poco problemático |
Motivo
Se declara un campo static y readonly (Shared y ReadOnly en Visual Basic) y se inicializa con un valor que se puede calcular durante la compilación.
Descripción de la regla
El valor de un campo staticreadonly se calcula en tiempo de ejecución cuando se llama al constructor estático correspondiente al tipo declarativo.Si el campo staticreadonly se inicializa cuando se declara y no se declara un constructor estático de manera explícita, el compilador emite un constructor estático para inicializar el campo.
El valor de un campo const se calcula en tiempo de compilación y se almacena en los metadatos, lo que aumenta el rendimiento en tiempo de ejecución en comparación con un campo staticreadonly.
Dado que el valor asignado al campo de destino se calcula en tiempo de compilación, cambie la declaración a un campo const para que el valor se calcule en tiempo de compilación en lugar de en tiempo de ejecución.
Cómo corregir infracciones
Para corregir una infracción de esta regla, reemplace los modificadores static y readonly por el modificador const.
Cuándo suprimir advertencias
Es seguro suprimir una advertencia de esta regla o deshabilitar la regla, si el rendimiento no es importante.
Ejemplo
El ejemplo siguiente muestra un tipo (UseReadOnly) que infringe la regla y otro (UseConstant) que la cumple.
Imports System
Namespace PerformanceLibrary
' This class violates the rule.
Public Class UseReadOnly
Shared ReadOnly x As Integer = 3
Shared ReadOnly y As Double = x + 2.1
Shared ReadOnly s As String = "readonly"
End Class
' This class satisfies the rule.
Public Class UseConstant
Const x As Integer = 3
Const y As Double = x + 2.1
Const s As String = "const"
End Class
End Namespace
using System;
namespace PerformanceLibrary
{
// This class violates the rule.
public class UseReadOnly
{
static readonly int x = 3;
static readonly double y = x + 2.1;
static readonly string s = "readonly";
}
// This class satisfies the rule.
public class UseConstant
{
const int x = 3;
const double y = x + 2.1;
const string s = "const";
}
}