Use literals where appropriate
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer

Use literals where appropriate







Breaking Change

Non Breaking

A field is declared static and readonly (Shared and ReadOnly in Visual Basic), and is initialized with a value that is computable at compile time.

The value of a static readonly field is computed at runtime when the static constructor for the declaring type is called. If the static readonly field is initialized when it is declared and a static constructor is not declared explicitly, the compiler emits a static constructor to initialize the field.

The value of a const field is computed at compile time and stored in the metadata, which increases runtime performance when compared to a static readonly field.

Because the value assigned to the targeted field is computable at compile time, change the declaration to a const field so that the value is computed at compile time instead of at runtime.

To fix a violation of this rule, replace the static and readonly modifiers with the const modifier.

It is safe to suppress a warning from this rule, or disable the rule entirely, if performance is not of concern.

The following example shows a type, UseReadOnly, that violates the rule and a type, UseConstant, that satisfies the rule.

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";
© 2016 Microsoft