El tipo Index y el operador ^
Haga referencia a elementos desde el final de una colección.
El tipo Index y el operador ^ es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 1 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 Index
C# le proporciona el tipo dedicado System.Index para describir una posición dentro de una secuencia. A diferencia de un int simple, un Index puede representar una posición contada desde el final de una colección, no solo desde el principio.
Esto hace que un código como «deme el último elemento» sea expresivo y seguro.
using System;
int[] numbers = { 10, 20, 30, 40, 50 };
Index first = 0;
Console.WriteLine(numbers[first]); // 10El operador ^ (desde el final)
El operador de acento circunflejo ^ crea un Index que cuenta desde el final. ^1 significa el último elemento, ^2 el penúltimo, y así sucesivamente.
Tenga en cuenta que ^1 es el último índice válido, mientras que ^0 equivale a Length y está una posición más allá del final.
using System;
int[] numbers = { 10, 20, 30, 40, 50 };
Console.WriteLine(numbers[^1]); // 50 (last)
Console.WriteLine(numbers[^2]); // 40Index como valor de primera clase
Un Index es un valor real que puede almacenar en una variable, pasar a métodos y reutilizar. Esto separa la posición de la colección.
using System;
int[] data = { 1, 2, 3, 4, 5 };
Index last = ^1;
Index secondLast = ^2;
Console.WriteLine(data[last]); // 5
Console.WriteLine(data[secondLast]); // 4IsFromEnd y Value
Cada Index expone dos propiedades: Value (el desplazamiento entero) y IsFromEnd (indica si se creó con ^).
using System;
Index fromStart = 2;
Index fromEnd = ^2;
Console.WriteLine(fromStart.Value + " " + fromStart.IsFromEnd); // 2 False
Console.WriteLine(fromEnd.Value + " " + fromEnd.IsFromEnd); // 2 TrueGetOffset resuelve la posición
Un índice desde el final solo tiene sentido cuando se conoce la longitud de la colección. Index.GetOffset(length) lo convierte en un desplazamiento concreto basado en cero.
using System;
Index fromEnd = ^1;
int length = 5;
int offset = fromEnd.GetOffset(length);
Console.WriteLine(offset); // 4^0 está una posición más allá del final
Como ^0 se resuelve como Length, utilizarlo para indexar produce una excepción. Solo resulta útil como límite superior exclusivo de un rango, como verá en la siguiente lección.
using System;
int[] data = { 1, 2, 3 };
try {
Console.WriteLine(data[^0]); // out of range!
} catch (IndexOutOfRangeException) {
Console.WriteLine("^0 is past the end");
}Index funciona con muchas colecciones
Cualquier tipo que tenga un indexador y una propiedad Length o Count (además del soporte adecuado) puede usar Index. Los arrays, string y Span<T> funcionan directamente.
using System;
string word = "Coddy";
Console.WriteLine(word[^1]); // y
Console.WriteLine(word[^5]); // CCálculo dinámico de índices
Puede crear un Index a partir de un entero obtenido en tiempo de ejecución usando el operador ^ sobre una variable.
using System;
int[] data = { 5, 10, 15, 20 };
int n = 2;
Index idx = ^n; // ^ works on variables too
Console.WriteLine(data[idx]); // 15Index frente a un int simple
Un int simple siempre cuenta desde el principio. Index añade la posibilidad de contar desde el final y, al mismo tiempo, se convierte implícitamente desde int, por lo que el código existente sigue funcionando.
using System;
Index a = 1; // implicit from int
Index b = ^1; // from end
Console.WriteLine(a.IsFromEnd); // False
Console.WriteLine(b.IsFromEnd); // TrueCómo evitar errores de desfase de uno
Para acceder al último elemento antes había que escribir arr[arr.Length - 1]. Con ^1, la intención queda explícita y no hay operaciones aritméticas que puedan contener errores.
using System;
int[] scores = { 88, 92, 79, 95 };
Console.WriteLine(scores[scores.Length - 1]); // old way: 95
Console.WriteLine(scores[^1]); // new way: 95Index en código real
Aquí tiene un pequeño auxiliar que devuelve el último elemento de cualquier array mediante ^1, manteniendo limpio el sitio de llamada.
using System;
static T Last<T>(T[] items) => items[^1];
int[] nums = { 3, 6, 9, 12 };
Console.WriteLine(Last(nums)); // 12Comprobación rápida
Compruebe su comprensión del tipo Index y del operador ^.
Resumen
Ha aprendido que System.Index representa una posición que puede contarse desde el principio o, con el operador ^, desde el final.
^1es el último elemento;^0equivale aLength(una posición más allá del final).Indextiene las propiedadesValueeIsFromEnd, además del métodoGetOffset(length).- Se convierte implícitamente desde
inty funciona con arrays, cadenas y spans.
Preguntas frecuentes
¿La lección «El tipo Index y el operador ^» es gratis?
Sí — el texto completo de «El tipo Index 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 Index y el operador ^»?
Haga referencia a elementos desde el final de una colección. 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 1 de 4.
¿Cuánto tiempo toma la lección «El tipo Index 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