0Pricing
C# Academy · Lección

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..3

El 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,30

Inicio 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,4

Rangos 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,50

Rangos 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,3

Range.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 2

Range.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,7

Creació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,13

Comprobació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

  1. El tipo Index y el operador ^
  2. El tipo Range y el operador ..
  3. Rangos con arrays y cadenas
  4. Tipos personalizados compatibles con rangos
← Volver a C# Academy