Der Range-Typ und der ..-Operator
Erstellen Sie Ausschnitte mit Range-Ausdrücken.
Der Range-Typ und der ..-Operator ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Der Rangetyp
System.Range beschreibt einen Ausschnitt einer Sequenz mithilfe eines Start- und eines Ende-Index. Zusammen mit dem Bereichsoperator .. lassen sich damit Teilsequenzen besonders passend ausdrücken.
using System;
Range r = 1..3;
Console.WriteLine(r.Start + ".." + r.End); // 1..3Der ..-Operator (Bereichsoperator)
Der Bereichsoperator a..b erstellt einen Range vom Index a (einschließlich) bis zum Index b (ausschließlich). 1..3 umfasst daher die Positionen 1 und 2.
using System;
int[] data = { 10, 20, 30, 40, 50 };
int[] slice = data[1..3];
Console.WriteLine(string.Join(",", slice)); // 20,30Start einschließlich, Ende ausschließlich
Das exklusive Ende entspricht der Funktionsweise von for-Schleifen: Die Anzahl der Elemente ist end - start. Der Bereich 2..5 liefert drei Elemente.
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,4Bereiche mit offenem Ende
Sie können eine der beiden Grenzen weglassen. ..3 bedeutet „vom Anfang bis vor 3“, und 2.. bedeutet „von 2 bis zum Ende“. .. allein kopiert die gesamte Sequenz.
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,50Bereiche mit vom Ende aus gezählten Indizes
Kombinieren Sie .. mit ^, um relativ zum Ende auszuschneiden. ^2.. bedeutet „die letzten beiden Elemente“.
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 als gespeicherter Wert
Ein Range ist ein Wert, den Sie benennen und für verschiedene Sammlungen mit derselben Längensemantik wiederverwenden können.
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
Um einen Bereich anhand einer konkreten Länge aufzulösen, rufen Sie GetOffsetAndLength(length) auf. Die Methode gibt den Startversatz und die Länge des Ausschnitts zurück und verarbeitet vom Ende aus gezählte Indizes für Sie.
using System;
Range r = ^3..^1;
var (offset, length) = r.GetOffsetAndLength(5);
Console.WriteLine(offset + " " + length); // 2 2Range.All
Das statische Range.All entspricht .. und wählt die gesamte Sequenz aus. Es ist praktisch, wenn Sie Bereiche als Argumente übergeben.
using System;
Range whole = Range.All;
int[] d = { 9, 8, 7 };
Console.WriteLine(string.Join(",", d[whole])); // 9,8,7Range explizit erstellen
Neben dem Operator können Sie für mehr Klarheit den Konstruktor oder die Factory-Methoden Range.StartAt und Range.EndAt aufrufen.
using System;
Range a = new Range(1, 3);
Range b = Range.StartAt(2);
Range c = Range.EndAt(2);
Console.WriteLine(a + " | " + b + " | " + c);Leere und ungültige Bereiche
Ein Bereich, bei dem Start und Ende gleich sind, erzeugt einen leeren Ausschnitt. Bei einem Bereich, dessen Start nach der Auflösung hinter dem Ende liegt, wird beim Ausschneiden eine Ausnahme ausgelöst.
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"); }Alles zusammenführen
Mit Bereichen lässt sich die Verarbeitung von Text und Arrays prägnant ausdrücken. Hier entnehmen wir ein Fenster aus der Mitte eines Arrays, ohne Indexarithmetik zu benötigen.
using System;
int[] readings = { 5, 7, 9, 11, 13, 15 };
int[] window = readings[1..^1];
Console.WriteLine(string.Join(",", window)); // 7,9,11,13Schnelltest
Vergewissern Sie sich, dass Sie die Semantik des Bereichsoperators verstehen.
Zusammenfassung
Sie haben gelernt, dass System.Range mit dem Operator .. einen Ausschnitt beschreibt.
- Der Start ist einschließlich, das Ende ausschließlich: Anzahl = end - start.
- Die Grenzen sind optional:
..3,2..,... ..lässt sich für Ausschnitte vom Ende mit^kombinieren.GetOffsetAndLength(length)löst einen Bereich in konkrete Zahlen auf.
Häufig gestellte Fragen
Ist die Lektion „Der Range-Typ und der ..-Operator“ kostenlos?
Ja — der vollständige Text von „Der Range-Typ und der ..-Operator“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Der Range-Typ und der ..-Operator“?
Erstellen Sie Ausschnitte mit Range-Ausdrücken. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C# Academy zu starten?
Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Der Range-Typ und der ..-Operator“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?
Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Der Index-Typ und der ^-Operator
- Der Range-Typ und der ..-Operator
- Ranges mit Arrays und Zeichenfolgen
- Benutzerdefinierte Typen mit Range-Unterstützung