我试图检查一个类中是否有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个类是否相同? 感谢名单。
答案 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)