2012-04-30 5 views
6

Das sollte eine ziemlich grundlegende Frage sein, aber ich habe ein bisschen Mühe gehabt, eine definitive Antwort zu finden.In C# führt Array.ToArray() eine DEEP-Kopie durch?

Wenn Sie ein Array von Werten haben und die Methode .ToArray() verwenden, wird eine tiefe oder flache Kopie des Arrays erstellt?

+0

Ich war eigentlich auf der Suche nach einer Antwort im Internet, bevor ich einen schnellen Test dafür geschrieben habe (was nicht so schnell wie Googeln ist). Ich denke, der Grund für die Bewertung -1 in der Frage liegt nur daran, dass Sie zwischen Deep Copy, Shallow Copy und Objektreferenzierung falsch verstehen (was Sie wahrscheinlich als seichte Kopie bezeichnen). – capn

Antwort

13

Nr

Sie können dies leicht überprüfen, indem Sie ein kleines Programm schreiben zu testen.

+0

+1. Beachten Sie, dass es, wenn es sich um ein Array von Struct handelt, Werte kopieren wird (immer noch flache Kopie). –

+0

Ich habe gerade ein kleines Programm mit einem String [] mit 3 Elementen erstellt, dann habe ich ein neues Array mit = origArray.ToArray() erstellt. Dann habe ich ein Element im neuen Array geändert und beide Arrays ausgedruckt. bedeutet das nicht, dass es eine tiefe Kopie ist? Was sehe ich über? – hrh

+2

Es gibt keine eingebaute Möglichkeit, tief in C# zu kopieren, daher ist Ihre Definition von "tief" wahrscheinlich ungewöhnlich. Stellen Sie sich die Frage "Was ist eine tiefe Kopie, hier ist mein Verständnis ..." (vergessen Sie nicht, klar zu erklären, wie Sie es verstehen, damit andere Menschen bestätigen/kommentieren können, welcher Teil Ihres Verständnisses falsch oder nicht traditionell ist) . –