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;
}
}