HashSet.Contains很快,但是我需要搜索对象的多个属性。
HashSet.Contains很快,但是我需要搜索对象的多个属性。
我有一个变量itemList,它是一个List
HashSet
为了解决这个问题,可以通过在Equals和GetHashCode方法中添加其他属性来实现。可以创建一个自定义的比较器类TestItemComparer,实现IEqualityComparer
public class TestItemComparer: IEqualityComparer
{
public bool Equals(TestItem x, TestItem y)
{
return x.Number == y.Number && x.Something == y.Something;
}
public int GetHashCode(TestItem obj)
{
return obj.Number ^ obj.Something;
}
}
然后,在使用HashSet
var hashSet = new HashSet
这样,当调用Contains方法时,可以传入一个具有多个属性的对象进行查找:
hashSet.Contains(new TestItem { Number = 1, Something = "something" });
需要注意的是,比较器应该仅仅用于比较两个对象,而不应该包含其他逻辑。如果需要搜索TestItem.State属性为"blue"或"black"的元素,应该分别调用两次Contains方法来实现。在实现比较器时,不应该使用任何“非常规”的方式,以免导致代码难以理解。
总结起来,当需要在HashSet