您可以通过编写实现 的类IComparer<object>
并将其传递给 LINQOrderBy
方法来创建一个排序的新列表。像这样:
SortedList theList = new SortedList();
// I assume you populate it here
// Then, to sort:
var sortedByValue = theList.Cast<object>().OrderBy(a => a, new ListComparer()).ToList();
这将对项目进行排序并创建一个新的List<object>
名为sortedByValue
. 如下图ListComparer
所示。
尽管这回答了您的问题,但我怀疑这是否是您真正想要的。但我对您的应用程序、您如何使用 以及您想对上面的结果做什么了解不够,SortedList
无法给出任何不同的建议。我强烈怀疑您需要重新考虑您的设计,因为您在这里所做的事情非常不寻常。
这是ListComparer
.
public class ListComparer: IComparer<object>
{
public int Compare(object x, object y)
{
if (x == null && y == null)
{
return 0;
}
if (x == null)
{
return -1;
}
if (y == null)
{
return 1;
}
if (x is Class1)
{
if (y is Class1)
{
return (x as Class1).Prop1.CompareTo((y as Class1).Prop1);
}
// Assume that all Class1 sort before Class2
return 1;
}
if (x is Class2)
{
if (y is Class2)
{
return (x as Class2).Prop3.CompareTo((y as Class2).Prop3);
}
if (y is Class1)
{
// Class1 sorts before Class2
return -1;
}
// y is not Class1 or Class2. So sort it last.
return 1;
}
// x is neither Class1 nor Class2
if ((y is Class1) || (y is Class2))
{
return -1;
}
// Don't know how to compare anything but Class1 and Class2
return 0;
}
}