Sdílet prostřednictvím


CA1802: Použít literály, případně

Název_typu

UseLiteralsWhereAppropriate

CheckId

CA1802

Kategorie

Microsoft.Performance

Změnit rozdělení

Bez rozdělení

Příčina

Pole je deklarována jako static a readonly (Shared a ReadOnly v Visual Basic) a je inicializována s hodnotou, která je computable v době kompilace.

Popis pravidla

Hodnota staticreadonly pole je vypočítávána běhu při statický konstruktor pro deklarující typ volání.Pokud staticreadonly pole je inicializován, když je deklarována a statický konstruktor není deklarována explicitně, kompilátor vyzařuje statický konstruktor inicializace pole.

Hodnota const pole je vypočítána v době kompilace a uloženy v metadatech je ve srovnání se zvyšuje výkon runtime staticreadonly pole.

Hodnota přiřazená k cílové pole je computable v době kompilace, změna prohlášení k const pole tak, aby hodnota je vypočítávána v době kompilace místo za běhu.

Jak opravit porušení

Porušení tohoto pravidla opravíte nahradit static a readonly s modifikátory const modifikátor.

Při potlačení upozornění

Je bezpečné potlačí upozornění od tohoto pravidla nebo zakázat pravidla, pokud není výkon znepokojení.

Příklad

Následující příklad ukazuje typ, UseReadOnly, který porušuje pravidla a typ, UseConstant, který splňuje pravidla.

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