为集合集合实现比较器

时间:2013-04-09 17:37:45

标签: c# generics dictionary iequalitycomparer

我有我的班级

MyClass<MyTriple<FirstG, SecondG, ThirdG>> : ICollection<MyTriple<FirstG, SecondG, ThirdG>>

我的数据存储在:

Dictionary<FirstG, Dictionary<SecondG, ThirdG>> Data

我希望为我的数据实施IEqualityComparerMyClass的构造函数必须作为MyTriple的参数比较器:

public MyClass(IEqualityComparer<MyTriple<FirstG, SecondG, ThirdG>> comparer) {...}

我希望(不知何故)将此比较器传递给Data并在构造函数中创建它,如:

Data = new Dictionary<FirstG, new Dictionary<SecondG, ThirdG>(SecondAndThirdGComparer)>(FirstGComparer);

我真的没希望,我尝试创建实现IEqualityComparer的比较器,但我无法弄清楚,如何获得FirstGComparer<FirstG>比较器。感谢您的任何建议。

1 个答案:

答案 0 :(得分:3)

好的,所以用户输入了comparer参数(到构造函数)类型:

IEqualityComparer<MyTriple<FirstG, SecondG, ThirdG>>

现在,这可能是“3D”中任何疯狂的比较者。没有人可以保证这个comparer以坐标或词典方式工作。因此,绝对 no 方式可以“排除”仅FirstG的比较器。

假设您有两个实例firstG_XfirstG_Y。然后从comparer你无法判断这两者是否相等。您可以要求comparer仅比较两个三元组。如果你将firstG_X“扩展”到某个三元组,将firstG_Y扩展到其他三元组,则必须做出任意选择,而来自可疑comparer的答案很可能取决于选择。

希望我说的是有道理的。