我有一个排序列表
private SortedList _slSorted = new SortedList();
_slSorted
的值为Field
,类型为class(实际上有2个类交替转储到其中),其中包含所有属性。
例如:
key:0 value:class1 object(having properties property 1 , property 2)
key:1 value:class2 object(having properties property 3 , property 4)
key:2 value:class1 object(having properties property 1 , property 2)
依旧......
我需要根据属性1或属性3对sortedList
进行排序。
类似收集所有属性值并对它们进行排序并重新排列
我该怎么做?
答案 0 :(得分:1)
您可以通过编写实现IComparer<object>
的类并将其传递给LINQ OrderBy
方法来创建已排序的新列表。像这样:
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;
}
}