Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Kopiering af Arrays og Hukommelse | Arraymanipulation og Sortering
C# Arrays

Kopiering af Arrays og Hukommelse

Stryg for at vise menuen

Når du arbejder med arrays i C#, er det vigtigt at forstå, hvordan de lagres i hukommelsen, og hvad der sker, når du kopierer eller tildeler dem. Arrays i C# er referencetyper, hvilket betyder, at variabler indeholder en reference (eller pointer) til det sted, hvor arrayets data er lagret i hukommelsen, ikke selve dataene. Dette har væsentlige konsekvenser, når du tildeler én array-variabel til en anden, eller når du ønsker at lave en reel kopi af et arrays indhold. Hvis du overser disse detaljer, kan du utilsigtet ændre data steder, du ikke havde til hensigt, hvilket kan føre til fejl, der er svære at finde.

Program.cs

Program.cs

12345678910111213141516171819202122232425262728293031
namespace 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)); } } }

Når du tildeler én array-variabel til en anden, peger begge variabler på den samme hukommelsesplacering. Det betyder, at en ændring foretaget gennem den ene variabel også vises i den anden, fordi de blot er to referencer til det samme array. Hvis du vil undgå dette, skal du kopiere hvert element til et nyt array, som vist i koden ovenfor. Dette opretter et nyt array i hukommelsen, så ændringer i det ene array ikke påvirker det andet.

Dette fører til begreberne shallow copy og deep copy. En shallow copy kopierer kun referencen til arrayet, ikke selve elementerne. En deep copy opretter et nyt array og kopierer hvert element over i det, hvilket resulterer i to uafhængige arrays.

Program.cs

Program.cs

1234567891011121314151617
namespace 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)); } } }

Eksemplet viser, hvad der sker, når du udfører en overfladisk kopiering af et array i C#. Når du tildeler én array-variabel til en anden, såsom int[] shallow = numbers, opretter du ikke et nyt array eller kopierer elementerne. I stedet peger begge variabler, numbers og shallow, på det samme array i hukommelsen. Det betyder, at enhver ændring, du foretager gennem den ene variabel, vil være synlig gennem den anden.

Note
Definition

En overfladisk kopiering kopierer referencen til arrayet, så begge variabler peger på samme hukommelsesplacering. En dyb kopiering opretter et nyt array og kopierer alle elementer, så de to arrays er uafhængige af hinanden.

1. Hvad sker der, når du tildeler én array-variabel til en anden i C#?

2. Hvordan kan du oprette en ægte kopi af et array?

3. Hvorfor er det vigtigt at forstå array-hukommelse, når man manipulerer data?

question mark

Hvad sker der, når du tildeler én array-variabel til en anden i C#?

Vælg det korrekte svar

question mark

Hvordan kan du oprette en ægte kopi af et array?

Vælg det korrekte svar

question mark

Hvorfor er det vigtigt at forstå array-hukommelse, når man manipulerer data?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 5

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 3. Kapitel 5
some-alt