C#リスト< T>常にnullを返すOrderBy
-
06-07-2019 - |
質問
ここに私の設定があります。
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()メソッドを使用する必要があります。
所属していません StackOverflow