Jos*_*h K 2 .net c# sorting icomparable
我有几个实现接口的类,IFoo.我需要在表中显示这些类的对象列表,我希望能够按表中的任意列进行排序.因此,表的数据源是a List<IFoo>.
我遇到的问题是实现的标准方法IComparable或IComparer列表中使用的对象需要静态方法,但接口中不允许使用静态方法.所以,问题归结为:一个人怎么样List<IFoo>?
IComparable的
我不知道是什么让你觉得你需要使用静态方法,但这不正确.
您可以通过将其添加到以下IFoo各项来强制实施所有实施者:IComparable<IFoo>IFoo
interface IFoo : IComparable<IFoo>
{
int Value { get; set; } // for example's sake
}
class SomeFoo : IFoo
{
public int Value { get; set; }
public int CompareTo(IFoo other)
{
// implement your custom comparison here...
return Value.CompareTo(other.Value); // e.g.
}
}
Run Code Online (Sandbox Code Playgroud)
然后简单地排序你的List<IFoo>喜欢:
list.Sort();
Run Code Online (Sandbox Code Playgroud)
按任意列排序
您最初声明要按IFoo对象表中的任意列进行排序.这更复杂; 您需要能够按任何一个公共属性对对象列表进行排序,因此IComparable<IFoo>上面的基本实现不会削减它.
解决方案是创建一个PropertyComparer<T>实现的类IComparer<T>,并按任何属性进行 排序T.你可以专门为它编写IFoo,但在某些时候,每个开发人员都会遇到这个问题并最终编写一个通用的属性比较器,它将尝试对任何类型进行排序.因此,你可以谷歌"c#属性比较",你肯定会得到几个点击.这是一个简单的:
http://www.codeproject.com/Articles/16200/Simple-PropertyComparer