List.AddRange mit IEnumerableT Parameter nicht funktioniert?

8

Ich habe das folgende Szenario, in dem ich einige Elemente zu einer Liste hinzufügen möchte ...

%Vor%

Mit diesem Code werden der Liste keine Elemente hinzugefügt, aber wenn ich eine .ToList () nach der Linq-Anweisung hinzufüge, werden die Elemente korrekt hinzugefügt. Ich schätze, das liegt an der verzögerten Ausführung, aber ich hätte gedacht, dass die List.AddRange-Funktion einen IEnumerable akzeptiert, dass sie die hinzuzufügenden Elemente aufzählen würde.

Kann jemand bitte aufklären, warum das passiert?

    
John 31.07.2012, 23:49
quelle

4 Antworten

2

Danke für die Antworten. Ich habe versucht, den Code für dieses Beispiel zu vereinfachen, aber wie immer ist der Teufel in den Details!

Zwischen der .Where () -Anweisung und dem AddRange () -Aufruf löschte der Code (tief) die Quellenliste ("Elemente" in diesem Beispiel). Der Entwickler erkannte nicht, dass der Filter bis zum Aufruf von AddRange () verschoben wurde, zu welchem ​​Zeitpunkt sie die Quellliste bereits gelöscht hatten.

Gut zu wissen, dass ich die Handlung nicht verloren habe:)

    
John 01.08.2012, 02:24
quelle
4
  

Ich schätze, das liegt an der verzögerten Ausführung, aber ich hätte gedacht, dass die List.AddRange-Funktion einen IEnumerable akzeptiert, dass sie die hinzuzufügenden Elemente aufzählen würde.

Es tut es. Es gibt einen Kurzschluss für ICollection<T> (den Sie in diesem Fall nicht treffen würden), was dazu führen würde, dass ICollection<T>.CopyTo anstatt die Elemente zu nummerieren, ansonsten wird die Auflistung aufgelistet.

Versuchen Sie für ein funktionierendes Beispiel:

%Vor%

Dies verwendet Ihren genauen Code und gibt 500 aus (die richtige Anzahl an Elementen in List<T> ).

    
Reed Copsey 01.08.2012 00:00
quelle
2
  

Ich hätte gedacht, dass die List.AddRange Funktion akzeptiert ein   IEnumerable, dass es die hinzuzufügenden Elemente aufzählen würde.

Ich habe versucht, die unten und AddRange(IEnumerable<T>) funktioniert

%Vor%     
HatSoft 01.08.2012 00:06
quelle
1

Es funktioniert. Hier ist ein Komponententest, der es beweist:

%Vor%

Vielleicht gibt es etwas in Ihrem speziellen Szenario, das nicht richtig funktioniert.

    
Pablo Romeo 01.08.2012 00:01
quelle