CA2013: не используйте ReferenceEquals с типами значений
Свойство | Значение |
---|---|
Идентификатор правила | CA2013 |
Заголовок | не используйте ReferenceEquals с типами значений |
Категория | Надежность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | Как предупреждение |
Причина
Использование метода 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
Когда лучше отключить предупреждения
Отключать предупреждения из этого правила небезопасно. Рекомендуется использовать более подходящий оператор равенства, например ==
.