Frage

Hier ist mein Setup.

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

Laden liest aus einer XML-Datei, die die ItemList aufzufüllen

ich dann versuchen, die Artikelliste mit einer Priorität zu bestellen. Dies ist ein int? Für die Testzwecke jedoch alle Elemente haben einen anderen Wert.

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

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

return newItemList;

In dem obigen newItemList ist immer null. itemList hat einen Grafen von 7 habe ich dreifach geprüft und alle Elemente in der itemList Instanz eine Priorität gesetzt.

Was mache ich falsch?

Ich habe auch versucht ...

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

Nichts scheint zu funktionieren.

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Weder SortiertNach oder ToList gibt einen ItemList, so dass der Guss null zurück, als Joseph hingewiesen.

Wie Sie aus der List<T> Klasse erben, können Sie einfach die Sort-Methode verwenden, um sie zu sortieren:

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

Andere Tipps

Das Problem ist, dass SortiertNach keine ItemList zurückkehrt, ist es eine IOrderedEnumerable zurückgibt, und ToList () gibt einen ItemList nicht zurück, es eine Liste zurückgibt. So oder so, Sie versuchen, beide zu einem ItemList zu werfen, was sie nicht sind, so erhalten Sie den Wert 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(); 

Ich denke, das Problem ist die "als ItemList".

Die LINQ-Operatoren funktionieren nicht an Ort und Stelle auf Ihrem newItemList Objekt. Sie schaffen und neue Objekte zurück. Wenn Sie möchten, an Ort und Stelle tun Sortierung sollten Sie die Sort () -Methode der List <> verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top