- C#
- .NET (FX) 4.5–4.8
Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.
11. Juni 2014, 10:48
Hallo,
ich möchte gerne ein Array 1:1 an eine andere Variable übergeben. Dabei soll allerdings nicht nur eine Referenz übergeben werden sondern die Werte.
Da Array ein Referenz-Typ ist, klappt es nach folgender Methode nicht:
C#-Quellcode
- int[,] array = new int[5, 5];
- int z = 0;
- for (int x = 0; x < array.GetLength(0); x++)
- {
- for (int y = 0; y < array.GetLength(1); y++)
- {
- array[x, y] = z++;
- }
- }
- int[,] array2 = array;
11. Juni 2014, 10:50
Deep Copy von einer List(of)
11. Juni 2014, 10:56
Array.Copy kopiert die Elemente:
VB.NET-Quellcode
- Sub Main()
- Dim arr(5, 5) As Integer
- Dim z As Integer = 0
- For x As Integer = 0 To arr.GetLength(0) - 1
- For y As Integer = 0 To arr.GetLength(1) - 1
- arr(x, y) = z
- z += 1
- Next
- Next
- Dim arr2(5, 5) As Integer
- Array.Copy(arr, arr2, arr.Length)
- arr2(0, 0) = 999999
- arr(0, 0) = 88888
- Debug.Print(arr(0, 0).ToString())
- Debug.Print(arr2(0, 0).ToString())
- Console.Read()
- End Sub
lg
ScheduleLib 0.0.1.0
Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten11. Juni 2014, 10:59
Danke! Was ist denn der Unterschied zwischen Clone und CopyTo und was ist sinnvoller?
C#-Quellcode
- int[,] array = new int[5, 5];
- int z = 0;
- for (int x = 0; x < array.GetLength(0); x++)
- {
- for (int y = 0; y < array.GetLength(1); y++)
- {
- array[x, y] = z++;
- }
- }
- int[,] array2 = (int[,])array.Clone();
EDIT: Ach so, habe übersehen, dass das VB ist. Ist also Clone in C# das Äquivalent zu Array.Copy in VB.net?
11. Juni 2014, 10:59
Ach so, klar, bei Integer kann man einfach zuweisen. Nur bei Referenzwerten würde es nicht gehen.
@Angry Onion
Für Zahlen reicht dasClone
.
msdn.microsoft.com/de-de/libra…rray.clone(v=vs.110).aspx11. Juni 2014, 11:05
WhitePage schrieb:
Ach so, klar, bei Integer kann man einfach zuweisen. Nur bei Referenzwerten würde es nicht gehen.
Ein Integer-Array ist aber auch ein Referenztyp.
WhitePage schrieb:
Für Zahlen reicht das Clone .
Wieso reicht das nur bei Zahlen?
11. Juni 2014, 11:08
Ein Array ist zwar ein Referenztyp, aber seine Bestandteile sind Wertetypen. Und dann funktioniert das Klonen auch.
Wenn du Referenztypen in deinem Array hast (Objekte), dann werden nur die Referenzen dieser Objekte kopiert.
Steht doch alles in meinem Link.11. Juni 2014, 11:10
Es muss in C# genau so die .Copy Methode zur Verfügung stehen.
Problem was sein kann, dass du das Array "array" nennst. Würde da einen anderen Namen wählen da es ja auch eine Klasse Array mit gibt.lg
ScheduleLib 0.0.1.0
Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten11. Juni 2014, 11:28
Wenn sourceArray und destinationArray beide Referenztyparrays oder Arrays vom Typ Object sind, wird eine flache Kopie erstellt. Einer flache Kopie eines Array ist ein neues Array, das Verweise auf dieselben Elemente wie das ursprüngliche Array enthält. Die eigentlichen Elemente sowie Elemente, auf die ggf. verwiesen wird, werden nicht kopiert. Im Gegensatz dazu werden bei einer tiefen Kopie eines Array die Elemente sowie alle untergeordneten Elemente kopiert, auf die direkt oder indirekt verwiesen wird.
11. Juni 2014, 20:41
Gefragt ist hier nach einem Array-Klon. (tiefe Kopie eines Referenz-Typen heißt "Klon")
Array implementiert auchICloneable
, also wäre das Thema damit eiglich erledigt. Nur die ICloneable-Schnittstelle returnt idiotischerweise Datentyp Object, und man muss den Klon also noch auf den Original-Typ casten.VB.NET-Quellcode
- dim arr= {1,2,3,4}
- dim clone =DirectCast(arr.Clone, Integer())
Wers einfacher haben will kann auch einfach Linq hernehmen:
VB.NET-Quellcode
- dim clone=arr.ToArray
das klont auch.
Grundlagen: Fachbegriffe
11. Juni 2014, 20:51
ErfinderDesRades schrieb:
tiefe Kopie eines Referenz-Typen heißt "Klon"
In meinem MSDN-Link im Post#5 steht es, dass eine flache Kopie dabei erstellt wird.
11. Juni 2014, 21:05
ups - ja - flache Kopie.
Tief wäre, wenn die Array-Elemente Referenz-Typen wären, und auch diese geklont würden. Tut bei Integer-Array nix zur Sache, denn Integers sind Structures, die werden immer kopiert.12. Juni 2014, 07:04
ErfinderDesRades schrieb:
denn Integers sind
"Value Types", nicht aber "Reference Types". Jou.
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
Ähnliche Themen
Userform eine Variable als "Referenz" mit geben
SoEinVBler- - Sonstige Problemstellungen
image class speicherbelastung
vanao- - Sonstige Problemstellungen
Array in Hashtable ?
Zim- - Sonstige Problemstellungen
Array teils löschen, andere nachrücken und neue daten hinten dran hängen
Eggord- - Sonstige Problemstellungen
Array wird überschrieben
LukiLeu- - Sonstige Problemstellungen
Array als Rückgabe einer Funktion
brichun- - Sonstige Problemstellungen
-
5 Benutzer haben hier geschrieben
- WhitePage (5)
- Gast (3)
- fichz (2)
- ErfinderDesRades (2)
- RodFromGermany (1)