Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Kopiering av Arrayer og Minne | Arraymanipulering og Sortering
C#-Arrayer

Kopiering av Arrayer og Minne

Sveip for å vise menyen

Når du arbeider med arrayer i C#, er det viktig å forstå hvordan de lagres i minnet og hva som skjer når du kopierer eller tildeler dem. Arrayer i C# er referansetyper, noe som betyr at variabler holder en referanse (eller peker) til hvor arrayens data er lagret i minnet, ikke selve dataene. Dette har betydelige konsekvenser når du tildeler én arrayvariabel til en annen, eller når du ønsker å lage en ekte kopi av innholdet i en array. Hvis du overser disse detaljene, kan du ved et uhell endre data på steder du ikke hadde tenkt, noe som kan føre til feil som er vanskelige å oppdage.

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 arrayvariabel til en annen, peker begge variablene til samme minneplassering. Dette betyr at en endring gjort gjennom én variabel vises i den andre, fordi de bare er to referanser til samme array. Hvis du vil unngå dette, må du kopiere hvert element inn i en ny array, slik som vist i koden over. Dette oppretter en ny array i minnet, slik at endringer i én array ikke påvirker den andre.

Dette fører til begrepene shallow copy og deep copy. En shallow copy kopierer kun referansen til arrayen, ikke selve elementene. En deep copy oppretter en ny array og kopierer hvert element inn i den, noe som resulterer i to uavhengige arrayer.

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

Eksempelkoden viser hva som skjer når du utfører en overflatisk kopiering av et array i C#. Når du tilordner én arrayvariabel til en annen, for eksempel int[] shallow = numbers, oppretter du ikke et nytt array eller kopierer elementene. I stedet peker begge variablene, numbers og shallow, til det samme arrayet i minnet. Dette betyr at enhver endring du gjør gjennom én variabel vil være synlig gjennom den andre.

Note
Definisjon

En overflatisk kopiering kopierer referansen til arrayet, slik at begge variablene peker til samme minneplassering. En dyp kopiering oppretter et nytt array og kopierer alle elementene, slik at arrayene er uavhengige av hverandre.

1. Hva skjer når du tilordner én arrayvariabel til en annen i C#?

2. Hvordan kan du lage en ekte kopi av en array?

3. Hvorfor er det viktig å forstå arrayminne når du manipulerer data?

question mark

Hva skjer når du tilordner én arrayvariabel til en annen i C#?

Velg det helt riktige svaret

question mark

Hvordan kan du lage en ekte kopi av en array?

Velg det helt riktige svaret

question mark

Hvorfor er det viktig å forstå arrayminne når du manipulerer data?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 5

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 3. Kapittel 5
some-alt