15 Stimmen

Wie kann man eine ReadOnlyCollection<T> in T[] umwandeln?

Ich habe eine Klasse mit einer ReadOnlyCollection-Eigenschaft. Ich muss diese ReadOnlyCollection in eine int[] konvertieren. Wie lässt sich das bewerkstelligen? Ist es möglich, dies zu tun, ohne über die Sammlung zu iterieren?

0 Stimmen

Welche Version von C# verwenden Sie? Es gibt eine Million Möglichkeiten, diese Katze zu häuten.

0 Stimmen

Vermutlich wird die Sammlung irgendwann iteriert - vielleicht kann dieser Code ein IEnumerable<T> anstelle von T[] akzeptieren.

15voto

Michael Ulmann Punkte 1047

Sicher mit einer LINQ-Erweiterungsmethode myReadOnlyCollection.ToArray() .

1 Stimmen

Streng genommen iterieren Sie immer noch über die Sammlung - aber Sie können ja auch nicht no iterieren, um dies zu tun.

1 Stimmen

Ja, das ist richtig, es wird nur schön vom Rahmen umhüllt :)

13voto

Guffa Punkte 663241

Nein, es ist nicht möglich, eine ReadOnlyCollection in ein Array zu konvertieren, ohne sie zu iterieren. Das würde die Sammlung in eine beschreibbare Sammlung umwandeln und den Vertrag des Nur-Lese-Modus brechen.

Es gibt verschiedene Möglichkeiten, die Sammlung zu iterieren, die es Ihnen ersparen, die Schleife selbst zu schreiben, zum Beispiel mit der CopyTo-Methode

int[] collection = new int[theObject.TheProperty.Count];
theObject.TheProperty.CopyTo(collection, 0);

Oder die Erweiterungsmethode ToArray:

int[] collection = theObject.TheProperty.ToArray();

6voto

Nick Craver Punkte 609016

Es gibt keinen Weg ohne Iteration. Es gibt jedoch eine eingebaute Methode, um dies zu tun:

T[] myArray;
myCollection.CopyTo(myArray, 0);

oder mit Linq:

var myArray = myCollection.ToArray();

0 Stimmen

CopyTo() nimmt den Startindex und nicht die Gesamtzahl als zweiten Parameter...sorry, konnte das nicht beheben, während SO down war, jetzt aktualisiert.

2voto

Jason Punyon Punkte 38137

Wenn Sie mit den neueren Versionen des .NET-Frameworks arbeiten ReadOnlyCollection<T> implementiert IEnumerable<T> . IEnumerable<T> hat eine Erweiterungsmethode ToArray() . Sie würden diese Erweiterungsmethode also wie folgt verwenden...

var readOnly = new ReadOnlyCollection<int>(new List<int>() {1,2,3,4,5});
var myArray = readOnly.ToArray();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X