2010-12-16 25 views
7

mam w kodzieWay wypełnić List <> z elementami

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

Mecz później w kodzie, jeśli niektóre prace stan muszę wypełnić całą tę listę z tej samej wartości.

Oczywiście mogę to zrobić za pomocą pętli foreach i ustawić wartości. Czy jest to bardziej elegancki sposób? Chcę się tutaj nauczyć czegoś nowego.

+0

'AddRange' może? – leppie

Odpowiedz

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

Jeśli posiadasz IEnumerable, możesz użyć List.AddRange.

Przykład:

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

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

list.AddRange(someEnumerable); 
2

Dwie rzeczy tutaj.

Po pierwsze List<T>(int capacity) nie tworzy już listy z elementami capacity. Po prostu rezerwuje dla nich pamięć. Więc lista w powyższym przykładzie będzie miało to długość równa 0.

Ale jeśli masz listę i chcesz ustawić każdy element niemu można zrobić to tak:

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

Gdzie desiredValue jest wartością, którą chcesz ustawić dla każdego elementu.

Też dziwię się, że chcesz wypełnić każdy element listy o tej samej wartości. Jeśli wszystkie elementy są takie same, lista nie ma żadnego sensu, ale domyślam się, że być może trzeba będzie wypełnić z góry pewną wartość domyślną, a następnie zmienić niektóre z nich później.

5
retVal.ForEach(b => b.changedProp = newValue); 
Powiązane problemy