gpt4 book ai didi

c# - 对界面对象列表进行排序

转载 作者:行者123 更新时间:2023-11-30 19:06:44 25 4
gpt4 key购买 nike

我有几个实现接口(interface) IFoo 的类。我需要在表格中显示这些类的对象列表,我希望能够按表格中的任意列对其进行排序。因此,表的数据源是 List<IFoo> .

我遇到的问题是执行 IComparable 的标准方法或 IComparer对于列表中使用的对象,需要静态方法,但接口(interface)中不允许使用静态方法。所以,问题归结为:如何对 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.
}
}

然后只需对 List<IFoo> 进行排序像这样:

list.Sort();

按任意列排序

您最初声明要按 IFoo 对象表中的任意列进行排序。这更复杂;你需要能够根据对象的任何一个公共(public)属性对对象列表进行排序,所以基本的 IComparable<IFoo>上面的实现不会削减它。

解决方案是创建一个 PropertyComparer<T>实现 IComparer<T> 的类,并将按 的任何属性排序 T .您可以专门为 IFoo 编写它,但在某些时候,每个开发人员都倾向于遇到这个问题并最终编写一个通用属性比较器,该比较器将尝试对任何类型进行排序。因此,您可以在 google 上搜索“c# property comparer”,您一定会得到一些结果。这是一个简单的例子:

http://www.codeproject.com/Articles/16200/Simple-PropertyComparer

关于c# - 对界面对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9502240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com