努力理解Equals()

时间:2011-11-11 02:49:10

标签: c# .net equals

据我所知,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

他们怎么不相等?

2 个答案:

答案 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}}

但是,通常情况下,你不希望这两个玩家平等。当然可以让两名球员得分相同吗?

相关问题