据我所知,Equals()确定指定的对象是否等于当前对象。
所以如果我有这个Player类:
public class Player
{
int score;
public object Clone()
{
return this.MemberwiseClone();
}
public void SetScore(int i)
{
this.score = i;
}
public int GetScore()
{
return this.score;
}
}
Ant然后我像这样实例化两个玩家:
Player p1 = new Player();
p1.SetScore(7);
Player p2 = (Player)p1.Clone();
为什么Equals()在使用时会返回false:
Console.WriteLine(p1.Equals(p2)); // prints "False" to console
他们怎么不相等?
答案 0 :(得分:10)
因为除非你覆盖Equals函数,否则它会比较引用以查看它们是否是相同的对象。
请参阅Implementing the Equals Method。
在某些情况下,您可能会获得一些参考,并希望查看它是否是某个对象。说:
Player myFavorite = new Player();
//do stuff...
Player fastest = GetFastestPlayer();
if (myFavorite == fastest)
// I'm happy
答案 1 :(得分:4)
Jonathon Rienhart是正确的 - 除非你覆盖Equals
,否则你只是检查实例,而不是值。如果两个对象相同则无关紧要,如果它们不是同一个对象则它们不相等。另见:我和我一样,但我与同卵双胞胎不是同一个人。
如果覆盖Equals
运算符,则可以定义构成相等的内容 - 例如,如果两个Players
具有相同的分数,则可能需要考虑两个public override bool Equals(Object obj)
{
var player = (Player)obj;
if (player != null && player.score== this.score)
return true;
return false;
}
。
{{1}}
但是,通常情况下,你不希望这两个玩家平等。当然可以让两名球员得分相同吗?