CA1802: Use Literals Where Appropriate
The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
The latest version of this topic can be found at CA1802: Use Literals Where Appropriate.
TypeName|UseLiteralsWhereAppropriate|
|CheckId|CA1802|
|Category|Microsoft.Performance|
|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 it is 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, 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.