2010-12-16 7 views
7

ich in meinem CodeWay List <> mit Elementen füllen

List<BookedReelsState> retVal = new List<BookedReelsState>(somesize); 

Spiel später im Code haben, wenn einige Zustand Werke, die ich diese ganze Liste mit dem gleichen Wert ausfüllen müssen.

Natürlich kann ich es über foreach Schleife und Werte setzen, Gibt es elegantere Möglichkeit, dies zu tun? Ich lerne hier einfach etwas Neues.

+0

'AddRange' vielleicht? – leppie

Antwort

18
retVal.AddRange(Enumerable.Repeat(value, somesize)); 
0

Wenn Sie IEnumerable haben, können Sie List.AddRange verwenden.

Beispiel:

var list = new List<BookedReelsState>(20); 

var someEnumerable = new [] 
{ 
    new BookedReelsState(1), 
    new BookedReelsState(2), 
    new BookedReelsState(2) 
}; 

list.AddRange(someEnumerable); 
2

Zwei Dinge hier.

Erstens List<T>(int capacity) erstellt keine Liste mit capacity Elemente bereits darin. Es reserviert nur Erinnerung für sie. So ist die Liste in dem obigen Beispiel wird es Länge gleich auf 0

Aber wenn Sie eine Liste haben und wollen jedes Element davon setzen, können Sie es wie folgt tun:

retVal.ForEach(rv => rv = desiredValue); 

Wo desiredValue ist der Wert, den Sie für jedes Element festlegen möchten.

Ich finde es auch seltsam, dass Sie jedes einzelne Element einer Liste mit dem gleichen Wert füllen möchten. Wenn alle Elemente identisch sind, hat die Liste keinen Sinn, aber ich nehme an, dass Sie im Voraus einen Standardwert eingeben müssen, um später einige davon zu ändern.

5
retVal.ForEach(b => b.changedProp = newValue); 
Verwandte Themen