Question

Voici ma configuration.

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

Charger des lectures à partir d'un fichier XML pour remplir la liste d'éléments

Je tente ensuite de classer la liste d'éléments par priorité. C'est un int? Pour les besoins du test, toutefois, tous les éléments ont une valeur différente.

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

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

return newItemList;

Dans ce qui précède, newItemList a toujours la valeur null. itemList a un compte de 7. J'ai vérifié trois fois et tous les éléments de l'instance itemList ont un ensemble de priorités.

Qu'est-ce que je fais de travers?

J'ai aussi essayé ...

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

Rien ne semble fonctionner.

Merci d'avance!

Était-ce utile?

La solution

Ni OrderBy ni ToList ne renvoient de liste d'éléments. Le casting renvoie donc null, comme l'a souligné Joseph.

Comme vous héritez de la classe List < T > , vous pouvez simplement utiliser la méthode Sort pour le trier:

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

Autres conseils

Le problème est que OrderBy ne renvoie pas de liste d'éléments, il renvoie un IOrderedEnumerable et ToList () ne renvoie pas de liste d'éléments, il renvoie une liste. Quoi qu'il en soit, vous essayez de convertir les deux en une ItemList, ce qui n'est pas le cas, de sorte que vous obtenez une valeur nulle.

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(); 

Je pense que votre problème est le " comme ItemList ".

Les opérateurs LINQ ne fonctionnent pas sur votre objet newItemList. Ils créent et retournent de nouveaux objets. Si vous souhaitez effectuer un tri sur place, utilisez la méthode Sort () de List < >.

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top