El tipo Range y el operador ..
Obtenga segmentos mediante expresiones de rango.
El tipo Range y el operador .. es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.
Conozca el tipo Range
System.Range describe un segmento de una secuencia mediante un Index de inicio y otro de fin. Se combina perfectamente con el operador de rango .. para expresar subsecuencias.
using System;
Range r = 1..3;
Console.WriteLine(r.Start + ".." + r.End); // 1..3El operador .. (rango)
El operador de rango a..b crea un Range desde el índice a (inclusivo) hasta el índice b (exclusivo). Por tanto, 1..3 incluye las posiciones 1 y 2.
using System;
int[] data = { 10, 20, 30, 40, 50 };
int[] slice = data[1..3];
Console.WriteLine(string.Join(",", slice)); // 20,30Inicio inclusivo, fin exclusivo
El fin exclusivo refleja el funcionamiento de los bucles for: el número de elementos equivale a fin - inicio. El rango 2..5 produce tres elementos.
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,4Rangos abiertos
Puede omitir cualquiera de los dos límites. ..3 significa «desde el principio hasta antes de 3», y 2.. significa «desde 2 hasta el final». .. por sí solo copia toda la secuencia.
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,50Rangos con índices desde el final
Combine .. con ^ para segmentar desde el final. ^2.. significa «los dos últimos elementos».
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 como valor almacenado
Un Range es un valor al que puede asignar un nombre y reutilizar en distintas colecciones que sigan la misma convención de longitud.
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
Para resolver un rango con una longitud concreta, llame a GetOffsetAndLength(length). Devuelve el desplazamiento inicial y la longitud del segmento, y se ocupa de los índices desde el final.
using System;
Range r = ^3..^1;
var (offset, length) = r.GetOffsetAndLength(5);
Console.WriteLine(offset + " " + length); // 2 2Range.All
El miembro estático Range.All equivale a .. y selecciona toda la secuencia. Resulta práctico al pasar rangos como argumentos.
using System;
Range whole = Range.All;
int[] d = { 9, 8, 7 };
Console.WriteLine(string.Join(",", d[whole])); // 9,8,7Creación explícita de Range
Además del operador, puede llamar al constructor o a los métodos de fábrica Range.StartAt y Range.EndAt para aportar claridad.
using System;
Range a = new Range(1, 3);
Range b = Range.StartAt(2);
Range c = Range.EndAt(2);
Console.WriteLine(a + " | " + b + " | " + c);Rangos vacíos y no válidos
Un rango cuyo inicio coincide con el fin produce un segmento vacío. Un rango cuyo inicio queda después del fin, una vez resuelto, produce una excepción al segmentar.
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"); }Unirlo todo
Los rangos hacen más conciso el procesamiento de texto y arrays. Aquí extraemos una ventana de la parte central de un array sin realizar operaciones aritméticas con índices.
using System;
int[] readings = { 5, 7, 9, 11, 13, 15 };
int[] window = readings[1..^1];
Console.WriteLine(string.Join(",", window)); // 7,9,11,13Comprobación rápida
Asegúrese de comprender la semántica del operador de rango.
Resumen
Ha aprendido que System.Range describe un segmento mediante el operador ...
- El inicio es inclusivo y el fin exclusivo: cantidad = fin - inicio.
- Los límites son opcionales:
..3,2..,... ..se combina con^para segmentar desde el final.GetOffsetAndLength(length)resuelve un rango en números concretos.
Preguntas frecuentes
¿La lección «El tipo Range y el operador ..» es gratis?
Sí — el texto completo de «El tipo Range y el operador ..» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.
¿Qué aprenderé en «El tipo Range y el operador ..»?
Obtenga segmentos mediante expresiones de rango. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C# Academy?
No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «El tipo Range y el operador ..»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C# Academy?
Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- El tipo Index y el operador ^
- El tipo Range y el operador ..
- Rangos con arrays y cadenas
- Tipos personalizados compatibles con rangos