C#idiomatic C#
ca1856fundamentals/code-analysis/quality-rules

Code analysis

CA1856: Incorrect usage of ConstantExpected attribute

Learn about code analyzer rule CA1856 - Incorrect usage of ConstantExpected attribute

CA1856 Performance enabled by default in .NET 10: As error
Fix is breaking or non-breaking Non-breakingApplicable languages C#

Cause

The System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute attribute is not applied correctly on a parameter.

Rule description

This rule flags incorrect uses of the System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute attribute, such as:

How to fix violations

Correct your code as indicated by the specific error message you receive.

Example

The following code snippet shows violations of CA1856:

csharp
using System.Diagnostics.CodeAnalysis;

// Violation - value not compatible with parameter type.
static void M1([ConstantExpected(Min = "a")] char val) { }
// Violation - unsupported type for attribute.
static void M2([ConstantExpected] decimal val) { }
// Violation - Min and Max values are inverted.
static void M3([ConstantExpected(Max = 0, Min = 1)] int val) { }
// Violation - value does not fit within the parameter value bounds.
static void M4([ConstantExpected(Min = long.MinValue)] int val) { }

The following code snippet fixes the violations:

csharp
using System.Diagnostics.CodeAnalysis;

static void M1([ConstantExpected(Min = 'a')] char val) { }
static void M2(decimal val) { }
static void M3([ConstantExpected(Min = 0, Max = 1)] int val) { }
static void M4([ConstantExpected(Min = int.MinValue)] int val) { }

When to suppress warnings

A violation of this rule indicates an error in your code, and should always be fixed.