Compartilhar via


CA1802: usar literais quando apropriado

TypeName

UseLiteralsWhereAppropriate

CheckId

CA1802

Categoria

Microsoft.Performance

Alteração Significativa

Sem quebra

Causa

Um campo é declarado static e readonly (Shared e ReadOnly em Visual Basic), e iniciado com um valor que é computável em tempo de compilação.

Descrição da Regra

O valor de um campo de staticreadonly é computado pelo tempo de execução quando o construtor estático para o tipo declarando é chamado.Se o campo de staticreadonly é inicializado quando é declarado e um construtor estático não é declarada explicitamente, o compilador emite um construtor estático para inicializar o campo.

O valor de um campo de const é computado em tempo de compilação e armazenado nos metadados, que aumenta o desempenho de tempo de execução quando comparado a um campo de staticreadonly .

Como o valor atribuído ao campo de destino é computável em tempo de compilação, altere a declaração para um campo de const de forma que o valor é computado em tempo de compilação em vez de em tempo de execução.

Como Corrigir Violações

Para corrigir uma violação desta regra, substitua os modificadores de static e de readonly com o modificador de const .

Quando Suprimir Alertas

É seguro suprimir um aviso desta regra, ou desabilitar a regra, se o desempenho não é interessante.

Exemplo

O exemplo a seguir mostra um tipo, UseReadOnly, que viola a regra e um tipo, UseConstant, que obedece à regra.

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