如果您希望。載的方法來匹配就CPlayer。名稱,然後在CPlayer類實現這些方法:
public override bool Equals(object obj)
{
if (!(obj is CPlayer)
return false;
return Name == (obj as CPlayer).Name;
}
public override int GetHashCode()
{
return Name.GetHashCode();
}
如果你想Name
比較是不區分大小寫,代替使用此equals方法代替:
public override bool Equals(object obj)
{
if (!(obj is CPlayer)
return false;
return Name.Equals((obj as CPlayer).Name, StringComparison.OrdinalIgnoreCase);
}
如果你這樣做,你的。包含呼叫將按照您的需要進行工作。 其次,如果你想在列表中選擇該項目,這樣做:
var playerB = ListB[ListB.IndexOf(player)];
它使用相同.Equals和.GetHashCode方法。
UPD: 這可能是一個主觀的說法,但你也可以擠一些表現出來的是,如果你的.Equals方法相比,詮釋做字符串比較之前散列..
綜觀.NET源代碼(Reflector FTW)我可以看到,似乎只有HastTable類使用GetHashCode來提高它的性能,而不是每次使用.Equals來比較對象。在這樣一個小類的情況下,相等比較器很簡單,比較單個字符串。如果你比較了所有的屬性,那麼比較兩個整數會更快(尤其是如果它們被緩存:))
List.Contains和List.IndexOf不使用哈希碼,並使用.Equals方法,因此我建議檢查裏面的哈希碼。它可能不會引起任何注意,但是當你渴望得到每一個執行的ms(並不總是一件好事,bug hey!:P),這可能會幫助某人。只是說... :)
.NET 2.0不幸的是 – Matt 2010-04-23 08:37:54
@Matt:現在增加了.NET 2.0的可能解決方案。 – 2010-04-23 09:06:31