0Pricing
C# Academy · Lección

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]); // 10

El 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]); // 40

Index 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]); // 4

IsFromEnd 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 True

GetOffset 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]); // C

Cá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]); // 15

Index 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); // True

Có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: 95

Index 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)); // 12

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

  • ^1 es el último elemento; ^0 equivale a Length (una posición más allá del final).
  • Index tiene las propiedades Value e IsFromEnd, además del método GetOffset(length).
  • Se convierte implícitamente desde int y 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

  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