CA1856: Incorrect usage of ConstantExpected attribute

Property Value
Rule ID CA1856
Title Incorrect usage of ConstantExpected attribute
Category Performance
Fix is breaking or non-breaking Non-breaking
Enabled by default in .NET 8 As error

Cause

The ConstantExpectedAttribute attribute is not applied correctly on a parameter.

Rule description

This rule flags incorrect uses of the ConstantExpectedAttribute attribute, such as:

  • The Min or Max value isn't compatible with the parameter type.
  • The parameter type isn't supported for the ConstantExpectedAttribute attribute.
  • The Min and Max values are inverted.
  • The Min or Max value doesn't fit within the parameter value bounds.

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:

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:

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.