我正在使用System.Collections.Generic
,其中包含我编写的类的实例。
我已经读过 collections.Contains
方法使用object.Equals()
,或者接口中的Equals()
方法的实现。IEquatable
我已经覆盖了对象方法,以及从接口实现。但是,Queue.Contains(instance)
总是返回false。我究竟做错了什么?
例如...
class Foo : IEquatable<Foo>
{
...
int fooField1;
...
public override bool Equals(object obj)
{
Foo other = obj as Foo;
bool isEqual = false;
if (other.fooField1 == this.fooField1)
{
isEqual = true;
}
return isEqual;
}
public bool Equals(Foo other)
{
bool isEqual = false;
if (other.fooField1 == this.fooField1)
{
isEqual = true;
}
return isEqual;
}
}
...
void SomeFunction()
{
Queue<Foo> Q = new Queue<Foo>();
Foo fooInstance1 = new Foo();
Foo fooInstance2 = new Foo();
fooInstance1.fooField1 = 5;
fooInstance2.fooField1 = 5;
Q.Enqueue(fooInstanec1);
if(Q.Contains(fooInstance2) == false)
{
Q.Enqueue(fooInstance2);
}
}
fooInstance2 总是添加到队列中。事实上,当我在调试器上运行它时,永远不会达到 Equals 的实现。
我究竟做错了什么?