0Pricing
C# Academy · Aula

O tipo Range e o operador ..

Extraia fatias com expressões de intervalo.

O tipo Range e o operador .. é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 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 Range

System.Range descreve uma fatia de uma sequência usando um início e um fim Index. Ele combina perfeitamente com o operador de intervalo .. para expressar subsequências.

using System;

Range r = 1..3;
Console.WriteLine(r.Start + ".." + r.End); // 1..3

O operador .. (intervalo)

O operador de intervalo a..b constrói um Range do índice a (inclusivo) ao índice b (exclusivo). Portanto, 1..3 abrange as posições 1 e 2.

using System;

int[] data = { 10, 20, 30, 40, 50 };
int[] slice = data[1..3];
Console.WriteLine(string.Join(",", slice)); // 20,30

Início inclusivo, fim exclusivo

O fim exclusivo reproduz o funcionamento dos laços for: o número de elementos é igual a end - start. O intervalo 2..5 produz três 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

Intervalos abertos

Você pode omitir qualquer um dos limites. ..3 significa "do início até 3", e 2.. significa "de 2 até o fim". Apenas .. copia toda a sequência.

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

Intervalos com índices a partir do fim

Combine .. com ^ para fatiar em relação ao fim. ^2.. significa "os dois ú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 armazenado

Um Range é um valor que você pode nomear e reutilizar em diferentes coleções que sigam a mesma convenção de comprimento.

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 um intervalo em relação a um comprimento concreto, chame GetOffsetAndLength(length). Ele retorna o deslocamento inicial e o comprimento da fatia, tratando os índices a partir do fim para você.

using System;

Range r = ^3..^1;
var (offset, length) = r.GetOffsetAndLength(5);
Console.WriteLine(offset + " " + length); // 2 2

Range.All

O Range.All estático equivale a .. e seleciona toda a sequência. Ele é útil ao passar intervalos como argumentos.

using System;

Range whole = Range.All;
int[] d = { 9, 8, 7 };
Console.WriteLine(string.Join(",", d[whole])); // 9,8,7

Construindo Range explicitamente

Além do operador, você pode chamar o construtor ou os métodos de fábrica Range.StartAt e Range.EndAt para maior clareza.

using System;

Range a = new Range(1, 3);
Range b = Range.StartAt(2);
Range c = Range.EndAt(2);
Console.WriteLine(a + " | " + b + " | " + c);

Intervalos vazios e inválidos

Um intervalo em que o início é igual ao fim produz uma fatia vazia. Um intervalo cujo início está depois do fim (após a resolução) gera uma exceção no momento do fatiamento.

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"); }

Juntando tudo

Os intervalos tornam conciso o processamento de texto e matrizes. Aqui, obtemos uma janela no meio de uma matriz sem nenhuma aritmética de í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

Verificação rápida

Certifique-se de que compreende a semântica do operador de intervalo.

Recapitulação

Você aprendeu que System.Range descreve uma fatia com o operador ...

  • O início é inclusivo, o fim é exclusivo: a quantidade = fim - início.
  • Os limites são opcionais: ..3, 2.., ...
  • .. combina com ^ para fatiar a partir do fim.
  • GetOffsetAndLength(length) resolve um intervalo em números concretos.

Perguntas Frequentes

A aula “O tipo Range e o operador ..” é grátis?

Sim — o texto completo de “O tipo Range 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 Range e o operador ..”?

Extraia fatias com expressões de intervalo. 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 2 de 4.

Quanto tempo leva a aula “O tipo Range 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