如果目标是创建保留插入顺序的通用 只读 字典,SortedList 或 SortedDictionary 可以真正与 IComparer 一起使用,该 IComparer 尝试通过执行类似于以下的操作来维护插入顺序?class OrderedComparer<T> : IComparer<M>{ public int Compare(M x, M y) { return x.Equals(y) ? 0 : -1;//or 1 }}SortedList<M> orderedList = new SortedList<M>(new OrderedComparer<T>());(有趣的是,在SortedDictionary的情况下,上面的方法需要返回0或1,以防止元素按反向插入顺序排序)。 最佳答案 比较者必须遵守法律Compare(a, b) == -Compare(b, a) //assuming only possible values are -1, 0, 1这是 symmetry property 。您的示例代码不遵守它。因此,BCL 系列根本不给您任何保证。您违反了书面契约(Contract)。你不能这样做。相反,您可以向 M 添加一个新字段,您可以在其中将插入顺序存储为 int 。然后您可以在比较器中使用该字段。关于c# - 带有正确实现的比较器的 SortedList<>/SortedDictionary<> 能否用于保证插入顺序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20480654/
10-13 08:24