如果您希望。载的方法来匹配就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