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:
- The System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute.Min or System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute.Max value isn't compatible with the parameter type.
- The parameter type isn't supported for the System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute attribute.
- The System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute.Min and System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute.Max values are inverted.
- The System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute.Min or System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute.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.