CA2013: не используйте ReferenceEquals с типами значений

Свойство Значение
Идентификатор правила CA2013
Заголовок не используйте ReferenceEquals с типами значений
Категория Надежность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 Как предупреждение

Причина

Использование метода System.Object.ReferenceEquals для проверки одного или нескольких типов значений на равенство.

Описание правила

Если при сравнении значений с помощью ReferenceEquals objA и objB являются типами значений, то перед передачей они упаковываются в метод ReferenceEquals. Это означает, что даже если и objA, и objB представляют один и тот же экземпляр типа значения, метод ReferenceEquals все равно возвращает значение false, как показано в следующем примере.

Устранение нарушений

Чтобы устранить нарушение, используйте более подходящую проверку на равенство, например ==.


    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

Когда лучше отключить предупреждения

Отключать предупреждения из этого правила небезопасно. Рекомендуется использовать более подходящий оператор равенства, например ==.

См. также