0

我有我的课

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

我的数据存储在:

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

我想IEqualityComparer为我的数据实现。的构造函数MyClass必须作为参数比较器MyTriple

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

我想(以某种方式)将此比较器传递给Data并在构造函数中创建它,例如:

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

我真的很绝望,我尝试创建实现的比较器IEqualityComparer,但我不知道如何获得FirstGComparer<FirstG>比较器。感谢您的任何建议。

4

1 回答 1

3

好的,所以用户带有一个comparer类型的参数(给构造函数):

IEqualityComparer<MyTriple<FirstG, SecondG, ThirdG>>

现在,这可能是“3D”中任何疯狂的比较器。没有人可以保证这comparer以坐标方式或字典方式工作。因此,例如,您绝对不可能“分解”出 only 的比较器FirstG

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

希望我说的有道理。

于 2013-04-09T20:15:51.213 回答