Was ist der beste Weg, um von einer generischen IEnumerable<T>
Implementierung in ein Array von T zu konvertieren? Die aktuelle Lösung, die ich habe, sieht wie folgt aus:
Die Übertragung durch List<T>
scheint unnötig, aber ich konnte keinen besseren Weg finden, es zu tun.
Hinweis: Ich arbeite hier in C # 2.0.
Rufen Sie die ToArray
Erweiterungsmethode für% co_de auf %, tut es fast das gleiche wie unten und führt Typ-Sniffing und einige andere Optimierungen durch.
Im Allgemeinen verwenden Sie eine IEnumerable<T>
, die mit List<T>
und dann IEnumerable<T>
ist wahrscheinlich der einfachste Weg, dies zu tun.
Der Konstruktor für ToArray
überprüft das List<T>
, um zu sehen, ob es implementiert wird IEnumerable<T>
, um die Anzahl der Elemente zu ermitteln, um die Kapazität der Liste ordnungsgemäß zu initialisieren. Wenn nicht, wird es wie gewohnt erweitert.
Natürlich könnten Sie am Ende eine Anzahl von ICollection<T>
Instanzen erstellen, nur um List<T>
in IEnumerable<T>
zu transformieren. Zu diesem Zweck können Sie Ihre eigene Methode schreiben, aber Sie würden wirklich nur den Code kopieren, der bereits in T[]
existiert.
Bei einem kleinen .NET Reflector sieht es so aus, als ob die Linq ToArray-Erweiterungsmethode dasselbe tut, wie IEnumerable durch eine List & lt; & gt; Die Buffer-Klasse ist eine interne Klasse, aber das Verhalten scheint List & lt; & gt; ähnlich zu sein.
%Vor%Wenn es keine Möglichkeit gibt, die Länge des Arrays zu bestimmen, ist das der beste Weg.
Es gibt nichts in IEnumerable, mit dem Sie die Länge bestimmen können, aber vielleicht hat Ihr Code eine Möglichkeit, einen anderen Weg zu finden. Wenn ja, verwenden Sie das, um ein Array zu konstruieren.
Tags und Links arrays collections ienumerable .net-2.0 c#-2.0