Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA1067 |
| Заголовок | Переопределите метод Equals при реализации IEquatable |
| Категория | Проектирование |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Как предложение |
| Применимые языки | C# и Visual Basic |
Причина
Тип реализует 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();
}
Когда лучше отключить предупреждения
Не подавляйте нарушения этого правила.