C# 正在查找允许自定义排序方法的类
我编写了一个小应用程序,它允许我比较两个数据库模式,以检查结构上的差异。它一直延伸到专栏细节,这很好。当我比较非常小的数据库时,我没有遇到任何问题,但是当我开始比较具有数百个表的数据库时,上下滚动以查找错误的位置是很烦人的。最初,我使用KeyedCollection保存表的列表,但由于它不允许任何类型的排序,因此我改为SortedList。SortedList会对索引进行排序,这会按字母顺序为我提供表,但这比我需要的要少。我需要的是一个类,它允许我根据对象属性而不仅仅是索引值进行排序。为了便于使用,我想把有错误的表推到列表的最前面。有人知道我可以用哪门课来完成这个任务吗 EDIT1:List类没有索引,这对我的类来说很重要。我尝试使用Dictionary,它有索引,但没有排序方法。实现IComparer不起作用,因为构造函数只接受索引类型的IComparer。由于IComparer是另一个无法访问list类的内部值列表的类,因此无法基于对象属性进行比较C# 正在查找允许自定义排序方法的类,c#,.net,sorting,.net-2.0,C#,.net,Sorting,.net 2.0,我编写了一个小应用程序,它允许我比较两个数据库模式,以检查结构上的差异。它一直延伸到专栏细节,这很好。当我比较非常小的数据库时,我没有遇到任何问题,但是当我开始比较具有数百个表的数据库时,上下滚动以查找错误的位置是很烦人的。最初,我使用KeyedCollection保存表的列表,但由于它不允许任何类型的排序,因此我改为SortedList。SortedList会对索引进行排序,这会按字母顺序为我提供表,但这比我需要的要少。我需要的是一个类,它允许我根据对象属性而不仅仅是索引值进行排序。为了便于使
EDIT2:我需要一个类,它根据对象属性而不是索引值对索引进行排序,但是我开始相信这样的类是不存在的。使用重载构造函数和自定义类构造SortedList,您可以实现自定义类来对其进行排序。然后您需要创建一个类来实现:System.Collections.Generic.IComparer,然后,您可以将所有对象放入支持基于IComparer排序的集合中,例如: System.Collections.Generic.List将允许您根据自己的实现进行排序
这里有一个很好的例子来帮助您理解这一点。如果您只想创建自己的排序,那么这可能是最简单的:
List<Foo> myFoos = new List<Foo>();
//--Write code to fill the list
//sort by ID
myFoos.Sort(delegate(Foo foo1, Foo foo2)
{
return foo1.ID.CompareTo(foo2.ID);
});
//Sort by Last Name
myFoos.Sort(delegate(Foo foo1, Foo foo2)
{
return foo1.LastName.CompareTo(foo2.LastName);
});
List myFoos=new List();
//--编写代码来填充列表
//按ID排序
排序(委托(Foo-foo1,Foo-foo2)
{
返回foo1.ID.CompareTo(foo2.ID);
});
//按姓氏排序
排序(委托(Foo-foo1,Foo-foo2)
{
返回foo1.LastName.CompareTo(foo2.LastName);
});
如果不希望使用匿名方法,并且希望在多个位置具有相同类型的排序,也可以执行以下操作:
public class FooIDCompare : IComparer<Foo>
{
#region IComparer<foo> Members
public int Compare(Foo x, Foo y)
{
return x.ID.CompareTo(y.ID);
}
#endregion
}
FooIDCompare idCompare = new FooIDCompare();
myFoos.Sort(idCompare);
公共类FooIDCompare:IComparer
{
#地区I比较成员
公共整数比较(Foo x,Foo y)
{
返回x.ID.CompareTo(y.ID);
}
#端区
}
FooIDCompare-idCompare=新的FooIDCompare();
myFoos.Sort(idCompare);
要做到这一点,没有简单的方法。也许不难。因为它是用来生成输出的,所以我决定生成多个部分输出循环,以达到我想要的结果