Range-typen og ..-operatoren
Ta utsnitt med range-uttrykk.
Range-typen og ..-operatoren er en gratis leksjon i C# Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C# Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C# Academy inneholder totalt 4 leksjoner.
Bli kjent med Range-typen
System.Range beskriver et utsnitt av en sekvens ved hjelp av en start- og en slutt-Index. Den passer perfekt sammen med områdeoperatoren .. for å uttrykke delsekvenser.
using System;
Range r = 1..3;
Console.WriteLine(r.Start + ".." + r.End); // 1..3Operatoren .. (område)
Områdeoperatoren a..b oppretter et Range fra indeks a (inkludert) til indeks b (ekskludert). 1..3 omfatter derfor posisjon 1 og 2.
using System;
int[] data = { 10, 20, 30, 40, 50 };
int[] slice = data[1..3];
Console.WriteLine(string.Join(",", slice)); // 20,30Start inkludert, slutt ekskludert
Den ekskluderte slutten gjenspeiler hvordan for-løkker fungerer: antallet elementer er lik end - start. Området 2..5 gir tre elementer.
using System;
int[] data = { 0, 1, 2, 3, 4, 5, 6 };
int[] slice = data[2..5];
Console.WriteLine(slice.Length); // 3
Console.WriteLine(string.Join(",", slice)); // 2,3,4Områder uten én avgrensning
De kan utelate én av grensene. ..3 betyr "fra begynnelsen og fram til 3", mens 2.. betyr "fra 2 til slutten". .. alene kopierer hele sekvensen.
using System;
int[] d = { 10, 20, 30, 40, 50 };
Console.WriteLine(string.Join(",", d[..3])); // 10,20,30
Console.WriteLine(string.Join(",", d[2..])); // 30,40,50
Console.WriteLine(string.Join(",", d[..])); // 10,20,30,40,50Områder med indekser fra slutten
Kombiner .. med ^ for å lage et utsnitt relativt til slutten. ^2.. betyr "de to siste elementene".
using System;
int[] d = { 1, 2, 3, 4, 5 };
Console.WriteLine(string.Join(",", d[^2..])); // 4,5
Console.WriteLine(string.Join(",", d[..^1])); // 1,2,3,4 (drop last)Range som lagret verdi
En Range er en verdi De kan navngi og bruke på nytt på tvers av ulike samlinger med samme lengdekonvensjon.
using System;
Range middle = 1..^1; // drop first and last
int[] a = { 0, 1, 2, 3, 4 };
Console.WriteLine(string.Join(",", a[middle])); // 1,2,3Range.GetOffsetAndLength
For å finne et områdes konkrete plassering ut fra en bestemt lengde kan De kalle GetOffsetAndLength(length). Metoden returnerer startforskyvningen og utsnittets lengde, og håndterer indekser fra slutten for Dem.
using System;
Range r = ^3..^1;
var (offset, length) = r.GetOffsetAndLength(5);
Console.WriteLine(offset + " " + length); // 2 2Range.All
Den statiske Range.All er det samme som .. og velger hele sekvensen. Den er praktisk når De sender områder som argumenter.
using System;
Range whole = Range.All;
int[] d = { 9, 8, 7 };
Console.WriteLine(string.Join(",", d[whole])); // 9,8,7Opprette Range eksplisitt
I tillegg til operatoren kan De kalle konstruktøren eller fabrikkmetodene Range.StartAt og Range.EndAt for å gjøre koden tydeligere.
using System;
Range a = new Range(1, 3);
Range b = Range.StartAt(2);
Range c = Range.EndAt(2);
Console.WriteLine(a + " | " + b + " | " + c);Tomme og ugyldige områder
Et område der start er lik slutt, gir et tomt utsnitt. Et område der starten ligger etter slutten (etter at verdiene er beregnet), utløser et unntak når utsnittet opprettes.
using System;
int[] d = { 1, 2, 3, 4 };
Console.WriteLine(d[2..2].Length); // 0 (empty)
try { var _ = d[3..1]; }
catch (ArgumentOutOfRangeException) { Console.WriteLine("invalid range"); }Sette det sammen
Områder gjør behandling av tekst og arrayer konsis. Her henter vi et utsnitt midt i en array uten noen indeksberegning.
using System;
int[] readings = { 5, 7, 9, 11, 13, 15 };
int[] window = readings[1..^1];
Console.WriteLine(string.Join(",", window)); // 7,9,11,13Hurtigsjekk
Kontroller at De forstår semantikken til områdeoperatoren.
Oppsummering
De har lært at System.Range beskriver et utsnitt med operatoren ...
- Starten er inkludert, slutten er ekskludert: antall = end - start.
- Grenser er valgfrie:
..3,2..,... ..kan kombineres med^for utsnitt fra slutten.GetOffsetAndLength(length)konverterer et område til konkrete tall.
Lær deg C# med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 93
- Leksjoner
- 346
Ofte stilte spørsmål
Er leksjonen «Range-typen og ..-operatoren» gratis?
Ja – hele teksten i «Range-typen og ..-operatoren» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av C# Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i C# Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Range-typen og ..-operatoren»?
Ta utsnitt med range-uttrykk. Du øver på C# Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med C# Academy?
Ingen tidligere erfaring er nødvendig. C# Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Range-typen og ..-operatoren»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne C# Academy-leksjonen?
Ja. Alle C# Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Indekstypen og ^-operatoren
- Range-typen og ..-operatoren
- Ranges med matriser og strenger
- Egendefinerte typer med støtte for ranges