У меня есть определение класса C ++ / CLI, в котором я пытаюсь сделать тестирование на равенство скорее основанным на значениях, чем ссылочным (аналогично поведению String).Работают следующие определения:
namespace MyCode
{
public ref class MyClass
{
public:
MyClass();
bool operator==(MyClass^ obj) { return Equals(obj); }
bool operator!=(MyClass^ obj) { return !Equals(obj); }
virtual bool Equals(MyClass^ obj);
virtual bool Equals(System::Object^ obj) override;
virtual int GetHashCode() override;
};
}
Однако моя компания сейчас требует (и это правильно), что весь код должен соответствовать правилам анализа кода.Анализ кода последовательно сообщает о двух предупреждениях для вышеуказанного класса:
CA2226 : Microsoft.Usage : Since ''MyClass'' redefines operator '==', it should also redefine operator '!='.
CA2226 : Microsoft.Usage : Since ''MyClass'' redefines operator '!=', it should also redefine operator '=='.
Документация Microsoft по предупреждению CA2226 ясно дает понять, что это важное предупреждение, и его не следует подавлять - но что еще я могу сделать?
Я ищу способ (если возможно) исправить код, чтобы убрать это предупреждение.Это возможно, или мне просто нужно подавить это?