2013-06-18 5 views
10

Was ich versuche zu erreichen, ist ein Element zu einer Liste hinzufügen, mehrmals ohne Verwendung einer Schleife.Hinzufügen eines Elements mehrere Male zur gleichen Liste

I 50 Zahlen zu einer Liste hinzufügen werde und all die Zahl wollen gleich sein, sagen wir mal, 42. Ich bin mir bewusst, dass ich einfach eine kleine Schleife erstellen, die 50-mal läuft und fügt das gleiche Element immer wieder als solche;

List<int> listFullOfInts = new List<int>(); 
int addThis = 42; 
for(int i = 0; i < 50; i++) 
    listFullOfInts.Add(addThis); 

Was ich versuche zu tun ist etwas in der Art von;

listFullOfInts.AddRange(addThis, 50); 

Oder etwas, das zumindest so ähnlich ist, vielleicht mit Linq? Ich habe eine vage Erinnerung daran, wie ich das machen kann, aber ich kann es nicht finden. Irgendwelche Ideen?

+0

warum wollen Sie nicht eine Liste benutzen? –

+0

@RuneFS da das ist, wie ich es implementiert habe :) – Sander

+0

lol ich meinte "Warum willst du nicht eine Schleife verwenden?". Beats me, wie ich am Ende etwas anderes geschrieben habe (_need_ coffee) –

Antwort

32

können Sie Repeat verwenden:

List<int> listFullOfInts = Enumerable.Repeat(42, 50).ToList(); 

Demo

Wenn Sie bereits eine Liste haben, und Sie wollen nicht, ein neues mit ToList erstellen:

listFullOfInts.AddRange(Enumerable.Repeat(42, 50)); 
+4

+1 auch erwähnenswert, dass mit Referenztypen Verweis auf die gleiche Instanz hinzugefügt wird, so dass die Änderung eines der Elemente ändern sich andere 49 –

+0

Dies ist genau das, was ich gesucht habe! Vielen Dank! (Will als Antwort markieren, sobald ich erlaubt bin) – Sander

+0

Auch erwähnenswert, dass dies immer noch eine Schleife verwendet, irgendwo, aber es wird nicht sichtbar sein. –

2

Sie können Tue es nicht direkt mit LINQ, da LINQ frei von Nebenwirkungen ist, aber du kannst etwas von dem verwenden, was im Namespace System.linq gefunden wird, um das benötigte zu erstellen.

public static void AddRepeated<T>(this List<T> self,T item, int count){ 
    var temp = Enumerable.Repeat(item,count); 
    self.AddRange(temp); 
} 

Sie können dann verwenden, wie Sie in Ihrem Beitrag vorschlagen

listFullOfInts.AddRepeated(addThis, 50); 
+1

sollte nicht der Beispielaufruf 'listFullOfInts.AddRepeated (addThis, 50)' statt 'addRange' lauten? – mz8i

+0

Ja sollte es :) –

Verwandte Themen