C # List OrderBy nulo sempre retornando
-
06-07-2019 - |
Pergunta
Aqui está a minha configuração.
public class ItemList : List<Item>
{
public void Load() {...}
public void Save() {...}
}
Load lê de um arquivo XML para preencher o ITEMLIST
Eu, então, tentar ordenar a lista de itens de uma prioridade. Este é um int? Para efeitos de teste no entanto, todos os itens têm um valor diferente.
ItemList itemList = new ItemList();
itemList.Load();
ItemList newItemList = itemList
.OrderBy(item => item.Priority) as ItemList;
return newItemList;
No exemplo acima newItemList é sempre nulo. ITEMLIST tem uma contagem de 7. Eu triplo verificado e todos os itens na instância ITEMLIST ter um conjunto de prioridades.
O que estou fazendo de errado?
Eu também tentei ...
ItemList newItemList = itemList
.OrderBy(item => item.Priority)
.ToList() as ItemList;
Nada parece estar funcionando.
Agradecemos antecipadamente!
Solução
Nem OrderBy ou ToList retorna um ITEMLIST, de modo que o nulo fundição retornos, como Joseph apontou.
Como você está herdando da classe List<T>
, você pode simplesmente usar o método de classificação para classificá-lo:
ItemList itemList = new ItemList();
itemList.Load();
itemList.Sort((x, y) => x.Priority.CompareTo(y.Priority));
return itemList;
Outras dicas
O problema é que OrderBy não retornar um ITEMLIST, ele retorna um IOrderedEnumerable e ToList () não retorna um ITEMLIST, ele retorna um List. De qualquer maneira, você está tentando lançar tanto a um ITEMLIST, que eles não são, de modo a obter nulo.
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();
Eu acho que o problema é o "como ITEMLIST".
Os operadores LINQ não funciona no local em seu objeto newItemList. Eles criam e retornam novos objetos. Se você quer fazer no local de triagem você deve usar o método Sort () de List <>.