CA1067: переопределение равно при реализации IEquatable
Свойство | Значение |
---|---|
Идентификатор правила | CA1067 |
Заголовок | переопределение Equals при реализации IEquatable |
Категория | Проектирование |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | Как предложение |
Причина
Тип реализует IEquatable<T>, но не переопределяет метод Equals.
Описание правила
Интерфейс IEquatable<T>, реализующий тип, указывает, что он поддерживает сравнение двух экземпляров типа на равенство. Также следует переопределить реализации методов Equals и GetHashCode() в базовом классе, чтобы их поведение соответствовало их поведению в реализации System.IEquatable<T>.Equals. Подробнее см. здесь.
Ваша реализация Equals должна возвращать результаты, которые соответствуют реализации System.IEquatable<T>.Equals.
Устранение нарушений
Чтобы устранить нарушение, переопределите Equals и реализуйте его, вызвав реализацию System.IEquatable<T>.Equals. В следующих двух фрагментах кода показано нарушение правила и способы его устранения:
using System;
public struct S : IEquatable<S>
{
private readonly int _value;
public S(int f)
{
_value = f;
}
public bool Equals(S other)
=> _value == other._value;
}
using System;
public struct S : IEquatable<S>
{
private readonly int _value;
public S(int f)
{
_value = f;
}
public bool Equals(S other)
=> _value == other._value;
public override bool Equals(object obj)
=> obj is S objS && Equals(objS);
public override int GetHashCode()
=> _value.GetHashCode();
}
Когда лучше отключить предупреждения
Не отключайте предупреждения для этого правила.