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!

Foi útil?

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 <>.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top