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