Was ist der einfachste Weg ist, diese Transformation auszuführen:IList <int> zum Objekt []
IList<int>
zu object[]
Dank.
Was ist der einfachste Weg ist, diese Transformation auszuführen:IList <int> zum Objekt []
IList<int>
zu object[]
Dank.
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.)
Verwenden LINQ:
object[] arr = list.Cast<object>().ToArray();
myList.ToArray< object>();
, die nicht kompiliert werden. – SLaks
'ToArray()' kann nicht von einem heißen 'IList' –
@claguardia IList
Verwendung List<T>.ToArray()
Methode. Weitere Dokumentation hier http://msdn.microsoft.com/en-us/library/x303t819.aspx
Er sagte 'IList
das würde zu einem 'int []' nicht ein 'Objekt []' – CodesInChaos
Ist das (was ich naiv getan hätte) effizienter als SLaks Vorschlag? – cs0815
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
@ Lambert: Warum passiert es zweimal durch das Array? –