Übergeben eines leeren IEnumerable-Arguments an eine Methode

8

Ich habe diese Methode (vereinfacht):

%Vor%

Und ich rufe es so an:

%Vor%

Die Variable results wird mit einer LINQ-Auswahlbedingung (IEnumerable) gebildet.

Ich frage mich, ob das List<int>() der beste Weg (der schnellste?) ist, eine leere Sammlung zu übergeben, oder ist new int[0] besser? Oder etwas anderes wäre schneller, ein Collection usw.? In meinem Beispiel wäre null nicht in Ordnung.

    
avance70 05.05.2010, 13:12
quelle

2 Antworten

27

Ich würde Enumerable.Empty<int>()

verwenden %Vor%     
Lee 05.05.2010, 13:14
quelle
1

@ avance70. Nicht wirklich eine Antwort auf die ursprüngliche Frage, sondern eine Antwort auf Avance70s Frage nach einem IEnumerable mit nur einem Integer-Wert. Ich hätte es als Kommentar hinzugefügt, aber ich habe nicht genug Rep, um einen Kommentar hinzuzufügen. Wenn Sie an einer streng unveränderlichen Reihenfolge interessiert sind, haben Sie ein paar Möglichkeiten:

Generische Erweiterungsmethode:

%Vor%

Verwenden Sie so:

%Vor%

oder das:

%Vor%

oder das:

%Vor%

Ich hatte kürzlich einen Fall wie das obige Beispiel von Anfang / Ende, bei dem ich aufeinanderfolgende Werte aus einer Sequenz "extrahieren" musste (mit Skip und Take) und dann Anfangs- und Endwerte vorlegte und anfügte. Die Start- und Endwerte wurden zwischen dem letzten nicht extrahierten Wert und dem ersten extrahierten Wert (für Start) und zwischen dem letzten extrahierten Wert und dem ersten nicht extrahierten Wert (für Ende) interpoliert. Die resultierende Sequenz wurde dann erneut bearbeitet, möglicherweise reversierend.

Also, wenn die ursprüngliche Sequenz wie folgt aussieht:

1 2 3 4 5

Ich muss vielleicht 3 und 4 extrahieren und interpolierte Werte zwischen 2 und 3 und 4 und 5 hinzufügen:

2,5 3 4 4,5

Enumerable.Repeat. Verwenden Sie so:

%Vor%

Da dies IEnumerables sind, können sie natürlich auch in Verbindung mit anderen IEnumerable-Operationen verwendet werden. Nicht sicher, ob das wirklich "gute" Ideen sind oder nicht, aber sie sollten den Job erledigen.

    
wageoghe 05.05.2010 21:45
quelle