Compartir a través de


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";
   }
}