Класс C++/cli ref DataEntity
реализует Equals и HashCode. Я могу проверить поведение Equals
реализации через:Как проверить список элементов ссылок C++/cli для равенства?
entity1.Equals(entity2);
(источник C#) и он работает правильно. Если у меня теперь есть список таких DataEntities, и я вызываю list1.Equlas(list2)
, метод DataEntity#Equals
никогда не будет вызван.
В чем причина, и как я могу использовать метод List.Equals (...)?
источник C++/CLI:
public ref class DataEntity : System::Object
{
public:
DataEntity(System::String^ name,
System::String^ val)
: m_csName(name),
m_csValue(val) {}
System::String^ GetName() { return m_csName; }
System::String^ GetValue() { return m_csValue; }
virtual bool Equals(Object^ obj) override {
if(!obj){
return false;
}
DataEntity^ other = (DataEntity^)obj;
if(other){
if(m_csName->Equals(other->m_csName) &&
m_csValue->Equals(other->m_csValue)){
return true;
}
return false;
}
return false;
}
virtual int GetHashCode() override {
const int iPrime = 17;
long iResult = 1;
iResult = iPrime * iResult + m_csName->GetHashCode();
iResult = iPrime * iResult + m_csValue->GetHashCode();
return iPrime;
}
private:
System::String^ m_csName;
System::String^ m_csValue;
};
C# Unit тест который терпит неудачу!
[Test]
public void Test()
{
DataEntity de1 = new DataEntity("A", "B");
List<DataEntity> des1 = new List<DataEntity>();
des1.Add(de1);
List<DataEntity> des2 = new List<DataEntity>();
des2.Add(de1);
Assert.IsTrue(des1.Equals(des2));
}