2017-01-24 5 views
2

Wird der Index ein Element in einem List theList sein, das seinen Index in theList.ToArray() identisch ist? d. h., tut theList[i]==theList.ToArray()[i] sicher? Angenommen, die Antwort ist ja, möchte nur überprüfen.Wird List.ToArray() Indizes beibehalten?

Update:

Dies ist ein Anwendungsfall, wenn man sich nicht vorstellen kann dies nützlich: ich eine Optimierungsroutine bin mit, die ein Array als Eingabe akzeptiert. Momentan sind meine Variablen in einer Liste. Ich möchte die Optimierungsroutine für die Variablen ausführen, dann nehme ich das Ergebnis der Optimierungsroutine (die offensichtlich ein Array ist) und lege sie in die Liste zurück. Ich möchte sicher sein, dass ich sie einfach auf ihre ursprünglichen Indizes zurückstellen kann.

+0

Warum verwenden Sie Ihren Debugger nicht dafür? –

+0

Wie meinst du das? Wie überprüft das das im Allgemeinen? – dashnick

+0

Ja, 'ToArray' behält die Reihenfolge bei. Wäre nicht sehr nützlich, wenn es nicht wäre. (Und es macht keine Arrays mit Nicht-Null-Basen, wenn Sie das fragen.) – Ryan

Antwort

5

ToArray verwendet Array.Copy unter der Haube, die Ordnung erhält.

Von Array.Copy

Kopiert eine Reihe von Elementen aus einem Array an dem ersten Element ausgehend und sie in ein anderes Array Pasten bei dem ersten Element beginnen. Die Länge wird als 32-Bit-Ganzzahl angegeben.

Von ToArray

Die Elemente werden unter Verwendung von Array.Copy kopiert, der ein O ist, (n) Operation, wobei n Count ist.

+0

Ich frage mich, ob es eine explizite Schnittstellenimplementierung für die LINQ-Version gibt. +1 für den "Standard" Grund, warum es funktionieren würde. – BradleyDotNET

+0

Das ist eine gute Frage. – kemiller2002

1

LINQs ToArray zählt nur die Auflistung auf und stopft die Ergebnisse in ein Array. List<T> zählt linear auf, also ja; Die Indizes stimmen überein.

Bitte beachten Sie, dass dies durch die .NET-Spezifikation/-Dokumentation nicht garantiert wird, sich aber wahrscheinlich nicht ändert.

Verwandte Themen