1

これが私のセットアップです。

public class ItemList : List<Item>
{
  public void Load() {...}
  public void Save() {...}
}

XML ファイルから読み取りをロードして、ItemList に入力します。

次に、アイテム リストを優先度順に並べてみます。これはintですか?ただし、テスト目的のため、すべてのアイテムの値は異なります。

ItemList itemList = new ItemList();
itemList.Load();

ItemList newItemList = itemList
                        .OrderBy(item => item.Priority) as ItemList;

return newItemList;

上記では、newItemList は常に null です。itemList のカウントは 7 です。トリプル チェックを行ったところ、itemList インスタンス内のすべてのアイテムに優先順位が設定されています。

私は何を間違っていますか?

私も試しました...

ItemList newItemList = itemList
                        .OrderBy(item => item.Priority)
                        .ToList() as ItemList;

何も機能していないようです。

前もって感謝します!

4

4 に答える 4

7

問題は、OrderBy が ItemList を返さず、IOrderedEnumerable を返し、ToList() が ItemList を返さず、List を返すことです。いずれにせよ、両方を ItemList にキャストしようとしていますが、そうではないため、null になります。

ItemList someList = (new ItemList {new Item(2), new Item(1), new Item(3)});

//this returns an IOrderedEnumerable<Item>
var result = someList.OrderBy(i => i.Priority); 

//this returns a List<Item>
var otherResult = someList.ToList(); 
于 2009-10-23T14:39:33.353 に答える
2

OrderBy も ToList も ItemList を返さないため、ジョセフが指摘したように、キャストは null を返します。

クラスから継承しているのでList<T>、Sort メソッドを使用して並べ替えることができます。

ItemList itemList = new ItemList();
itemList.Load();
itemList.Sort((x, y) => x.Priority.CompareTo(y.Priority));
return itemList;
于 2009-10-23T14:46:23.153 に答える
0

あなたの問題は「as ItemList」だと思います。

于 2009-10-23T14:43:45.513 に答える
0

LINQ 演算子は、newItemList オブジェクトではインプレースで機能しません。新しいオブジェクトを作成して返します。その場でソートしたい場合は、List<> の Sort() メソッドを使用する必要があります。

于 2009-10-23T14:45:01.547 に答える