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

Code analysis

CA2013: Do not use ReferenceEquals with value types

Learn about code analysis rule ca2013: Do not use ReferenceEquals with value types

CA2013 Reliability enabled by default in .NET 10: As warning
Fix is breaking or non-breaking Non-breakingApplicable languages C# and Visual Basic

Cause

Using System.Object.ReferenceEquals method to test one or more value types for equality.

Rule description

When comparing values using System.Object.ReferenceEquals, if objA and objB are value types, they are boxed before they are passed to the System.Object.ReferenceEquals method. This means that even if both objA and objB represent the same instance of a value type, the System.Object.ReferenceEquals method nevertheless returns false, as the following example shows.

How to fix violations

To fix the violation, replace it with a more appropriate equality check such as ==.

csharp

    int int1 = 1, int2 = 1;

    // Violation occurs, returns false.
    Console.WriteLine(Object.ReferenceEquals(int1, int2));  // false

    // Use appropriate equality operator or method instead
    Console.WriteLine(int1 == int2);                        // true
    Console.WriteLine(object.Equals(int1, int2));           // true

When to suppress warnings

It is not safe to suppress a warning from this rule. We recommend using the more appropriate equality operator, such as ==.

See also