Domanda

Ecco la mia configurazione.

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

Carica letture da un file XML per popolare la ItemList

Provo quindi a ordinare l'elenco degli articoli in base a una priorità. Questo è un int? Ai fini del test, tuttavia, tutti gli articoli hanno un valore diverso.

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

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

return newItemList;

In newItemList sopra è sempre nullo. itemList ha un conteggio di 7. Ho controllato tre volte e tutti gli elementi nell'istanza itemList hanno una priorità impostata.

Cosa sto sbagliando?

Ho anche provato ...

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

Nulla sembra funzionare.

Grazie in anticipo!

È stato utile?

Soluzione

Né OrderBy né ToList restituiscono un ItemList, quindi il casting restituisce null, come ha sottolineato Joseph.

Poiché stai ereditando dalla classe Elenco < T > , puoi semplicemente utilizzare il metodo Sort per ordinarlo:

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

Altri suggerimenti

Il problema è che OrderBy non restituisce un ItemList, restituisce un IOrderedEnumerable e ToList () non restituisce un ItemList, ma restituisce un Elenco. Ad ogni modo, stai provando a trasmettere entrambi a un ItemList, che non lo sono, quindi ottieni 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(); 

Penso che il tuo problema sia il " come ItemList " ;.

Gli operatori LINQ non funzionano sul posto sul tuo nuovo oggetto ItemList. Creano e restituiscono nuovi oggetti. Se desideri eseguire l'ordinamento sul posto, devi utilizzare il metodo Sort () di Elenco < > ;.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top