0

我在 .NET 2.0 中有一个很棒的任务(我想念 LINQ - 很多),我有一个对象列表。我从 API 获取这些对象,因此我无法添加任何接口。

我需要对它们进行排序,例如:

  • AZ 在标题上
  • 标题上的 ZA
  • 某个日期最新的
  • 某个日期最老的
  • AZ 在其他一些文本字符串上

所以,虽然我通常会笑着说 .OrderBy(c=>c.MyTitle) ,但我怀疑你通常会怎么做。

我记得在古代我使用 .Sort() 方法,但据我记得,您必须实现 IComparable 接口,这在此处是不可能的。

速度无关紧要,因为我们处理的项目少于 100 个,并且它发生在 Page_Load 事件(网络表单)上。

你建议我怎么做?制作一些自定义排序算法(甚至可能像 InsertionSort 一样糟糕)?过去人们是如何做到这一点的?

4

3 回答 3

1

列表Sort method在 2.0 中仍然存在,它在 2.0 中IComparer<T>仍然存在。(除非“这里不可能”你的意思是你不能这样做还有另一个原因,在这种情况下,我很抱歉!)

于 2013-06-06T08:21:33.293 回答
1

您可以使用以下两种重载之一:

  1. 需要 a 的重载,Comparison<T>基本上是Func<T, T, int>
  2. 需要一个IComparer<T>;的重载

使用第一个重载,按标题升序排序可能看起来像这样(从MSDN借来的:

list.Sort(CompareTitle);

public int CompareTitle(YourItem x, YourItem y)
{
    if (x == null)
    {
        if (y == null)
        {
            // If x is null and y is null, they're
            // equal. 
            return 0;
        }
        else
        {
            // If x is null and y is not null, y
            // is greater. 
            return -1;
        }
    }
    else
    {
        // If x is not null...
        //
        if (y == null)
            // ...and y is null, x is greater.
        {
            return 1;
        }
        else
        {
            return x.Title.CompareTo(y.Title);
        }
    }
}
于 2013-06-06T08:22:55.113 回答
1

显然,您可以使用 sort 和自定义委托进行比较,作为net 2.0 中不同类型结构的已回答排序列表

于 2013-06-06T08:22:57.667 回答