当所有项目被视为相同时,我遇到IComparer
和System.Collections.Generic.List
的问题:
如果源列表中的所有项目都被认为是相等的,我希望“已排序”列表与源列表具有完全相同的项目顺序(即保持不变)。
但是,我注意到排序列表中的项目顺序不同。
例如,假设我按名字对人物对象列表进行排序:
来源清单:
将名字与IComparer
进行比较:
重现:
public class AllTheSameComparer : IComparer<int>
{
public int Compare(int x, int y)
{
return 0; // all are equal
}
}
以下单元测试将失败超过20项:
[TestMethod]
public void testCompareSimple()
{
var numbers = new List<int>();
for (var i = 0; i < 2000; i++)
{
numbers.Add(i);
}
var fixture = new AllTheSameComparer();
numbers.Sort(fixture);
for (var i = 0; i < numbers.Count; i++)
{
var actual = numbers[i];
Assert.AreEqual(i, actual);
}
}
这是预期的行为吗?有没有办法让我保持相等元素的原始项目顺序而不必比较第二个对象属性?