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..3O 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,30Iní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,4Intervalos 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,50Intervalos 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,3Range.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 2Range.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,7Construindo 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,13Verificaçã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
- O tipo Index e o operador ^
- O tipo Range e o operador ..
- Intervalos com matrizes e strings
- Tipos personalizados compatíveis com intervalos