1

セカンダリソートタイプを実装しようとしている汎用リストがあります。1つのタイプでうまくソートすることはできますが、2番目のソートを行うのに問題があります。

これが私が取り組んでいるものです:

私がソートを呼び出すとき:

List<Totals> totals = new LoadTotalList();
totals.Sort(Totals.Status); 

合計クラスは次のとおりです。

public class Totals
{
  public string Status { get; set; } 
  public string Total { get; set; } 
  public string Cost { get; set; } 

  public static Comparison<Totals> StatusComp = 
delegate(Totals item1, Totals item2)
{
 return item1.Status.CompareTo(item2.Status);
};

  public static Comparison<Totals> CostComp = 
delegate(Totals item1, Totals item2)
{
 return item1.Cost.CompareTo(item2.Cost);
};


}

最初のタイプをソートしてから2番目のタイプをソートしようとしましたが、2番目のソートタイプを取得できないようです。OrderBy 句、次に ThenBy 句を使用して Linq で実行できることはわかっています。しかし、他にオプションはありますか。よろしくお願いします。

4

2 に答える 2

6

Comparison<T>一次比較と二次比較を持つを作成するのは簡単です。

public static class Comparisons
{
    public static Comparison<T> Then<T>(this Comparison<T> primary,
                                        Comparison<T> secondary)
    {
        // TODO: Nullity validation
        return (x, y) =>
        {
            int first = primary(x, y);
            return first != 0 ? first : secondary(x, y);
        };
    }
}

次に、次を使用できます。

list.Sort(Totals.StatusComp.Then(Totals.CostComp));

(簡単に同じことができIComparer<T>ます。)

于 2013-04-08T15:01:24.180 に答える