Array-Kopieren und Speicher
Swipe um das Menü anzuzeigen
Beim Arbeiten mit Arrays in C# ist es wichtig zu verstehen, wie sie im Speicher abgelegt werden und was passiert, wenn sie kopiert oder zugewiesen werden. Arrays in C# sind Referenztypen, was bedeutet, dass Variablen eine Referenz (oder einen Zeiger) auf den Speicherort der Array-Daten halten und nicht die eigentlichen Daten selbst. Dies hat erhebliche Auswirkungen, wenn eine Array-Variable einer anderen zugewiesen wird oder wenn eine echte Kopie des Array-Inhalts erstellt werden soll. Werden diese Details übersehen, kann es passieren, dass Daten an unerwarteten Stellen verändert werden, was zu schwer auffindbaren Fehlern führen kann.
Program.cs
12345678910111213141516171819202122232425262728293031namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] original = { 1, 2, 3, 4, 5 }; // Assigning the array reference int[] assigned = original; // Copying the array elements int[] copied = new int[original.Length]; for (int i = 0; i < original.Length; i++) { copied[i] = original[i]; } // Modify the assigned array assigned[0] = 99; // Modify the copied array copied[1] = 77; System.Console.WriteLine("original: " + string.Join(", ", original)); System.Console.WriteLine("assigned: " + string.Join(", ", assigned)); System.Console.WriteLine("copied: " + string.Join(", ", copied)); } } }
Wird eine Array-Variable einer anderen zugewiesen, zeigen beide Variablen auf denselben Speicherort. Das bedeutet, dass eine Änderung über eine Variable auch in der anderen sichtbar ist, da beide lediglich Referenzen auf dasselbe Array sind. Um dies zu vermeiden, muss jedes Element in ein neues Array kopiert werden, wie im obigen Code gezeigt. Dadurch entsteht ein neues Array im Speicher, sodass Änderungen an einem Array das andere nicht beeinflussen.
Dies führt zu den Konzepten flache Kopie und tiefe Kopie. Eine flache Kopie kopiert nur die Referenz auf das Array, nicht die eigentlichen Elemente. Eine tiefe Kopie erstellt ein neues Array und kopiert jedes Element hinein, sodass zwei unabhängige Arrays entstehen.
Program.cs
1234567891011121314151617namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] numbers = { 10, 20, 30 }; int[] shallow = numbers; shallow[1] = 99; System.Console.WriteLine("numbers: " + string.Join(", ", numbers)); System.Console.WriteLine("shallow: " + string.Join(", ", shallow)); } } }
Das Codebeispiel zeigt, was passiert, wenn in C# eine flache Kopie eines Arrays durchgeführt wird. Wenn Sie einer Array-Variablen eine andere zuweisen, wie zum Beispiel int[] shallow = numbers, wird kein neues Array erstellt und die Elemente werden nicht kopiert. Stattdessen verweisen beide Variablen, numbers und shallow, auf dasselbe Array im Speicher. Das bedeutet, dass jede Änderung, die über eine der Variablen vorgenommen wird, auch über die andere sichtbar ist.
Eine flache Kopie kopiert die Referenz auf das Array, sodass beide Variablen auf denselben Speicherort zeigen. Eine tiefe Kopie erstellt ein neues Array und kopiert alle Elemente, sodass die Arrays unabhängig voneinander sind.
1. Was passiert, wenn Sie in C# einer Array-Variablen eine andere zuweisen?
2. Wie kann man eine echte Kopie eines Arrays erstellen?
3. Warum ist das Verständnis des Array-Speichers beim Bearbeiten von Daten wichtig?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen