質問

ここに私の設定があります。

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;

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

事前に感謝します!

役に立ちましたか?

解決

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

List&lt; T&gt; クラスから継承しているため、Sortメソッドを使用して並べ替えることができます。

ItemList itemList = new ItemList();
itemList.Load();
itemList.Sort((x, y) => x.Priority.CompareTo(y.Priority));
return itemList;

他のヒント

問題は、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(); 

あなたの問題は&quot; ItemList&quot;として。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top