0Pricing
C# Academy · Aula

O tipo Index e o operador ^

Faça referência a elementos a partir do fim de uma coleção.

O tipo Index e o operador ^ é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

Conheça o tipo Index

O C# oferece um tipo dedicado, System.Index, para descrever uma posição dentro de uma sequência. Diferentemente de um int comum, um Index pode representar uma posição contada a partir do fim de uma coleção, e não apenas a partir do início.

Isso torna expressivo e seguro escrever algo como "forneça-me o último elemento".

using System;

int[] numbers = { 10, 20, 30, 40, 50 };
Index first = 0;
Console.WriteLine(numbers[first]); // 10

O operador ^ (a partir do fim)

O operador circunflexo ^ constrói um Index que conta a partir do fim. ^1 significa o último elemento, ^2 o penúltimo, e assim por diante.

Observe que ^1 é o último índice válido, enquanto ^0 equivale a Length e está uma posição além do fim.

using System;

int[] numbers = { 10, 20, 30, 40, 50 };
Console.WriteLine(numbers[^1]); // 50 (last)
Console.WriteLine(numbers[^2]); // 40

Index como valor de primeira classe

Um Index é um valor real que você pode armazenar em uma variável, passar para métodos e reutilizar. Isso separa a posição da coleção.

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 e Value

Todo Index expõe duas propriedades: Value (o deslocamento inteiro) e IsFromEnd (se foi criado com ^).

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 resolve a posição

Um índice a partir do fim só tem significado quando você conhece o comprimento da coleção. Index.GetOffset(length) converte-o em um deslocamento concreto baseado em zero.

using System;

Index fromEnd = ^1;
int length = 5;
int offset = fromEnd.GetOffset(length);
Console.WriteLine(offset); // 4

^0 está uma posição além do fim

Como ^0 é resolvido para Length, indexá-lo gera uma exceção. Ele só é útil como limite superior exclusivo de um intervalo, que você verá na próxima lição.

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 com muitas coleções

Qualquer tipo com um indexador, além de uma propriedade Length ou Count (e o suporte adequado), pode usar Index. Matrizes, string e Span<T> funcionam imediatamente.

using System;

string word = "Coddy";
Console.WriteLine(word[^1]); // y
Console.WriteLine(word[^5]); // C

Calculando índices dinamicamente

Você pode construir um Index a partir de um inteiro obtido em tempo de execução usando o operador ^ em uma variável.

using System;

int[] data = { 5, 10, 15, 20 };
int n = 2;
Index idx = ^n;            // ^ works on variables too
Console.WriteLine(data[idx]); // 15

Index versus int comum

Um int comum sempre conta a partir do início. Index acrescenta a capacidade de contar a partir do fim e ainda faz conversão implícita a partir de int, portanto o código existente continua funcionando.

using System;

Index a = 1;   // implicit from int
Index b = ^1;  // from end
Console.WriteLine(a.IsFromEnd); // False
Console.WriteLine(b.IsFromEnd); // True

Evitando erros de uma posição

Alcançar o último elemento costumava exigir ler arr[arr.Length - 1]. Com ^1, a intenção fica explícita e não há aritmética que possa dar errado.

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 em código real

Aqui está um pequeno auxiliar que retorna o último item de qualquer matriz usando ^1, mantendo limpo o ponto de chamada.

using System;

static T Last<T>(T[] items) => items[^1];

int[] nums = { 3, 6, 9, 12 };
Console.WriteLine(Last(nums)); // 12

Verificação rápida

Teste sua compreensão do tipo Index e do operador ^.

Recapitulação

Você aprendeu que System.Index representa uma posição que pode contar a partir do início ou, com o operador ^, a partir do fim.

  • ^1 é o último elemento; ^0 equivale a Length (uma posição além do fim).
  • Index possui Value, IsFromEnd e GetOffset(length).
  • Ele aceita conversão implícita de int e funciona com matrizes, cadeias de caracteres e segmentos de memória.

Perguntas Frequentes

A aula “O tipo Index e o operador ^” é grátis?

Sim — o texto completo de “O tipo Index e o operador ^” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “O tipo Index e o operador ^”?

Faça referência a elementos a partir do fim de uma coleção. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “O tipo Index e o operador ^”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. O tipo Index e o operador ^
  2. O tipo Range e o operador ..
  3. Intervalos com matrizes e strings
  4. Tipos personalizados compatíveis com intervalos
← Voltar para C# Academy