2011-07-14 59 views
1

我試着檢查一個類中的2個變量,或者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類是相同的? Thanx。

+1

你想找到自己是否真的平等(中日兩個地對同一對象e數組),還是相等(不同的對象具有相同的ID,X和Y值)? – hatchet

+0

我需要檢查maptiles [0] .X maptiles [0] .Y maptiles [0] .ID是maptiles [1] .X maptiles [1] .Y maptiles [1] .ID – Marcus

+0

然後我會去執行你自己在課堂上的平等方法如下建議 – hatchet

回答

1

我認爲在.NET中更自然的方式是覆蓋Equals()並只比較該方法內的對象。

您可以實現任何想要的比較複雜度,以「.NET預期方式」構建結構非常重要,因此2年後的某個人至少能夠理解一個東西的邏輯。

問候。

0

您可以爲其他人所說的可以重寫的equals(也GetHashCode的)。

但是,如果您不想這樣做或不能這樣做,您可以編寫一個實現IEqualityComparer的類。

雖然實現不需要的IEqualityComparer(你可以只寫做了對比的方法),如果你決定去集合使用LINQ表達式像Distinct這將被證明是有用

例如

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) 
相關問題