1

オブジェクトをインスタンス化するクラスのメソッド (Q() と呼びます) の戻り値に応じて、オブジェクトのリストを並べ替えようとしています。クラス Decaf と Regular はどちらも同じクラス Coffee から派生しています。2 つの派生クラスには、問題のメソッド Q() の異なる実装もあります。次のようになります。

static void Main(string[] args)
{
      Decaf decafCoffee = null;
      Regular regularCoffee = null;
      List<Coffee> inventory = new List<Coffee>();
      if (type.StartsWith("D:"))
      {
          // The value of M changes based on certain criteria
          decafCoffee = new Decaf(name, D, C, M);
          inventory.Add(decafCoffee);
      }
      else if (type.StartsWith("R:"))
      {
          regularCoffee = new Regular(name, D, C, M);
          inventory.Add(regularCoffee);
      }   

      for (int j = 0; j < inventory.Count; j++)
      {
          Console.WriteLine("{0}", inventory[j].toString());
      }         
}

このリストを 2 つのクラスのメソッド Q() の値で昇順に並べ替えるにはどうすればよいですか? 必要に応じて、クラス コードを投稿できます。

4

2 に答える 2

3

最も簡単な方法は、おそらく Linq のOrderBy方法を使用することです。

var sorted = inventory.OrderBy(i => i.Q());

IEnumerableこれは--を返します。これをList行うだけの場合:

var sortedList = inventory.OrderBy(i => i.Q()).ToList();
于 2013-04-26T04:15:15.117 に答える
0

両方のクラスに IComparable インターフェイスを実装し、.Sort メソッドを使用します。

ここに例があります。 http://www.codeproject.com/Articles/42839/Sorting-Lists-using-IComparable-and-IComparer-Inte

于 2013-04-26T04:16:12.810 に答える