Исправление является критическим или не критическим
Не критическое
Включен по умолчанию в .NET 9
No
Причина
Тип значения (структура) переопределяет метод Equals, но не реализует IEquatable<T>.
Описание правила
Метод переопределения типа значения Equals указывает, что он поддерживает сравнение двух экземпляров типа на равенство значений. Рассмотрите возможность реализации интерфейса IEquatable<T> для поддержки строго типизированных проверок на равенство. Это гарантирует, что вызывающие объекты, выполняющие проверки на равенство, вызывают строго типизированный метод System.IEquatable<T>.Equals и не выполняют упаковку-преобразование аргумента, что улучшает производительность. Для получения дополнительных сведений см. здесь.
Чтобы устранить нарушение, реализуйте IEquatable<T> и обновите переопределение Equals, чтобы вызвать этот реализованный метод. В следующих двух фрагментах кода показано нарушение правила и способы его устранения:
C#
publicstruct S
{
privatereadonlyint _value;
publicS(int f)
{
_value = f;
}
publicoverrideintGetHashCode()
=> _value.GetHashCode();
publicoverrideboolEquals(object other)
=> other is S otherS && _value == otherS._value;
}
C#
using System;
publicstruct S : IEquatable<S>
{
privatereadonlyint _value;
publicS(int f)
{
_value = f;
}
publicoverrideintGetHashCode()
=> _value.GetHashCode();
publicoverrideboolEquals(object other)
=> other is S otherS && Equals(otherS);
publicboolEquals(S other)
=> _value == other._value;
}
Когда лучше отключить предупреждения
Это безопасно для подавления нарушений из этого правила, если преимущества проектирования и производительности от реализации интерфейса не являются критически важными.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
C#
#pragmawarning disable CA1066// The code that's violating the rule is on this line.#pragmawarning restore CA1066
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.