我写了一个小应用程序,它允许我比较两个数据库模式以检查结构的差异。它一直到列详细信息,这很好。当我比较非常小的数据库时,我没有遇到任何问题,但是当我开始将数据库与数百个表进行比较时,向上和向下滚动以找出错误的位置是很烦人的。最初,我使用KeyedCollection来保存表的列表,但由于它不允许任何类型的排序,我已经改为SortedList。 SortedList会对索引进行排序,这会按字母顺序给出表格,但这比我需要的要少。我需要的是一个允许我根据对象属性进行排序的类,而不仅仅是索引值。为了方便起见,我想把有错误的表推到列表的开头。任何人都知道我可以用哪个类来完成这个任务?
EDIT1:List类没有索引,这对我的班级来说至关重要。我尝试使用Dictionary,它有一个索引,但没有sort方法。实现IComparer不起作用,因为构造函数只接受索引类型的IComparer。由于IComparer是另一个无法访问我的列表类的内部值列表的类,我无法根据对象属性进行比较。
EDIT2:我需要一个按对象属性对索引进行排序的类,而不是索引值,但我开始相信这个类不存在。
答案 0 :(得分:2)
然后你需要创建一个类来实现: System.Collections.Generic.IComparer ,然后你可以把你的所有对象放到一个支持基于IComparer的排序的集合中,例如:
System.Collections.Generic.List允许您根据自己的实现进行排序。
这是一个link,可以帮助您理解这一点。
答案 1 :(得分:0)
答案 2 :(得分:0)
如果您要做的就是创建自己的排序,那么这可能是最简单的:
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);
});
如果您不想使用匿名方法并希望在多个位置使用相同类型的排序,您也可以这样做:
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);
答案 3 :(得分:0)
没有简单的方法可以做到这一点。也许甚至不是一个艰难的方式。由于它本来是用来输出的,所以我决定用多个部分输出循环来达到我想要的结果。