如何检查一个类中的2个变量是否相等?

时间:2011-07-14 18:18:28

标签: c# class list

我试图检查一个类中是否有2个变量,或者两个类是否相等,但我的消息框仍未显示。

Maptiles:这是一个包含类的列表,每个类都有变量:ID,X和Y

Mapindex:这是循环遍历maptiles列表中所有类的变量。

Mapnumber:这个变量从1开始,我用它来检查所有类

这是代码:

            for (int mapIndex = 0; mapIndex < MapTiles.Count; mapIndex++)
            {
                if (mapIndex + mapNumber >= MapTiles.Count)
                {
                    break;
                }
                if(MapTiles[mapIndex].Equals(MapTiles[mapIndex+mapNumber])) 
                {
                    System.Windows.Forms.MessageBox.Show("REMOVE");
                }
                mapNumber++;
            }

所以问题是,如何让它显示,或者如何检查2个类是否相同? 感谢名单。

4 个答案:

答案 0 :(得分:4)

你的类需要覆盖Object.Equals(),至少要进行比较才能解决问题。同时实现IEquatable是一个好主意。

更多信息:Guidelines for Overloading Equals() and Operator == (C# Programming Guide)

答案 1 :(得分:1)

您需要覆盖equals运算符。见http://msdn.microsoft.com/en-us/library/ms173147.aspx

答案 2 :(得分:1)

我认为在.NET中更自然的方式是覆盖Equals()并只比较该方法中的对象。

你可以实现你想要的任何比较复杂性,以“.NET预期方式”构建是很重要的,所以2年后的某个人至少可以理解一个东西的逻辑。

问候。

答案 3 :(得分:0)

你可以像其他人所说的那样可以覆盖Equals(以及GetHashCode)。

但是,如果您不想这样做或者不能这样做,您可以编写一个实现IEqualityComparer的类。

虽然不需要实现IEqualityComparer(你可以编写一个执行比较的方法),但如果你决定在集合上使用像Distinct这样的Linq表达式,它将会很有用

例如

class YourImplementedComparer: IEqualityComparer<Item> {

    public bool Equals(Item x, Item y) {
        return x.X== y.X &&
            x.Y == y.Y &&
            x.Y == y.Y
    }

    public int GetHashCode(Item obj) {
        return obj.X.GetHashCode() ^
            obj.Y.GetHashCode() ^
            obj.ID.GetHashCode() ;
    }
}

然后使用不同的

MapTiles  =  MapTiles.Distinct(new YourImplementedComparer)