2011-01-17 7 views

Antwort

1

Ich bin nicht sicher, ob dies der einfachste ist, aber es ist auf jeden Fall die effizienteste:

var result = new object[list.Count]; 
for (int i = 0; i < list.Count; i++) 
    result[i] = list[i]; //Warning: Inevitable boxing happening here 

Edit: Wenn Ihre Liste irgendwie langsamer mit Indizierung ist als mit ist IEnumerable<T> Schnittstelle, dann Ersetzen Sie einfach die for Schleife durch eine foreach Schleife.

(Ich persönlich hasse Enumerable ‚s Methoden in Bereichen, in denen Effizienz auch nur entfernt betreffen, einfach, weil, wie sie zahlreiche interne Objekte zu erstellen und mehrere ineffizienten Durchgänge durch die Daten durchführen.)

+1

Ist das (was ich naiv getan hätte) effizienter als SLaks Vorschlag? – cs0815

+0

Ja, weil 'Enumerable.Cast ()' ein neues 'CastIterator'-Objekt erstellt, das sofort verworfen wird; Außerdem durchläuft die SLaks-Methode das gesamte Array zweimal, während diese Methode nur einmal durchlaufen wird. Außerdem (dieser letzte Grund kommt in den Bereich der Mikrooptimierung, aber es ist immer noch gültig) Indizierung eines Arrays direkt ist schneller als Indexierung durch irgend etwas anderes (außer einem Zeiger) - selbst wenn es mit einem "IList " indexiert wird. – Mehrdad

+0

@ Lambert: Warum passiert es zweimal durch das Array? –

10

Verwenden LINQ:

object[] arr = list.Cast<object>().ToArray(); 
-1

myList.ToArray< object>();

+0

, die nicht kompiliert werden. – SLaks

+0

'ToArray()' kann nicht von einem heißen 'IList' –

+0

@claguardia IList erbt von IEnumerable , so gibt es eine ToArray(), aber nur ToArray und nicht ToArray CodesInChaos

Verwandte Themen