Tipagem pelo destino em coleções
Deixe o tipo de destino orientar a criação da coleção.
Tipagem pelo destino em coleções é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 3 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.
O que é tipagem pelo destino
Tipagem pelo destino significa que o compilador deduz o que uma expressão de coleção deve construir a partir do contexto em que ela é usada, em vez de usar um tipo explícito no lado direito.
using System;
int[] numbers = [1, 2, 3]; // target type is int[]
Console.WriteLine(numbers.GetType().Name); // Int32[]O destino determina o tipo
O mesmo literal se torna um tipo concreto diferente dependendo do tipo da variável, do parâmetro ou do retorno para o qual ele é encaminhado.
using System;
using System.Collections.Generic;
int[] asArray = [1, 2, 3];
List<int> asList = [1, 2, 3];
Console.WriteLine(asArray is int[]); // True
Console.WriteLine(asList is List<int>); // TrueTipagem pelo destino em chamadas de método
Quando um parâmetro de método é um tipo de coleção, o literal do argumento recebe a tipagem pelo destino desse parâmetro.
using System;
using System.Collections.Generic;
static void Show(List<int> items) =>
Console.WriteLine(string.Join(",", items));
Show([10, 20, 30]); // target-typed to List<int>Tipagem pelo destino em retornos
O corpo de um método pode retornar uma expressão de coleção sem tipo explícito; o tipo de retorno declarado fornece o destino.
using System;
using System.Collections.Generic;
static List<string> Tags() => ["csharp", "dotnet", "ranges"];
Console.WriteLine(Tags().Count); // 3Inferência do tipo de elemento
O tipo do elemento vem do destino. Se o destino for double[], os literais inteiros são convertidos automaticamente para double.
using System;
double[] values = [1, 2, 3]; // ints widen to double
Console.WriteLine(values[0] + 0.5); // 1.5Interfaces como destinos
As expressões de coleção podem ter como destino interfaces como IEnumerable<T>, IReadOnlyList<T> ou ICollection<T>; o compilador escolhe um tipo concreto adequado.
using System;
using System.Collections.Generic;
IReadOnlyList<int> ro = [1, 2, 3];
Console.WriteLine(ro.Count); // 3Operador ternário e tipagem pelo destino
Ambos os ramos de uma condicional podem ser expressões de coleção, cada um recebendo a tipagem pelo destino do tipo de resultado compartilhado.
using System;
bool useDefaults = false;
int[] config = useDefaults ? [0, 0, 0] : [1, 2, 3];
Console.WriteLine(string.Join(",", config)); // 1,2,3var não é um destino
Não é possível escrever var x = [1, 2, 3]; porque var não fornece um tipo de destino. Informe um tipo explícito ou use a expressão onde um tipo seja esperado.
using System;
// var x = [1, 2, 3]; // compile error: no target type
int[] x = [1, 2, 3]; // ok
Console.WriteLine(x.Length); // 3Tipagem pelo destino com expansões
A tipagem pelo destino e as expansões trabalham em conjunto: o destino determina o tipo final da coleção, enquanto as expansões fornecem o conteúdo.
using System;
using System.Collections.Generic;
int[] src = [1, 2, 3];
List<int> copy = [..src]; // copies into a List<int>
Console.WriteLine(copy is List<int>); // TrueReduzindo a verbosidade
A tipagem pelo destino elimina nomes de tipo repetidos. Compare a forma antiga redundante com a nova forma concisa.
using System;
// old: type repeated
int[] oldWay = new int[] { 1, 2, 3 };
// new: type only on the left
int[] newWay = [1, 2, 3];
Console.WriteLine(oldWay.Length == newWay.Length); // TrueCombinando tudo
Aqui, um único auxiliar aceita qualquer coleção somente leitura, e os chamadores passam livremente literais com tipagem pelo destino.
using System;
using System.Collections.Generic;
static int Count(IReadOnlyCollection<int> c) => c.Count;
Console.WriteLine(Count([1, 2, 3, 4])); // 4Verificação rápida
Teste sua compreensão da tipagem pelo destino.
Recapitulação
Você aprendeu como as expressões de coleção recebem a tipagem pelo destino.
- O tipo de destino (variável, parâmetro ou retorno) orienta a construção.
- Os tipos de elemento podem ser ampliados para corresponder ao destino.
- Interfaces como
IReadOnlyList<T>são destinos válidos. varnão pode ser um destino.
Perguntas Frequentes
A aula “Tipagem pelo destino em coleções” é grátis?
Sim — o texto completo de “Tipagem pelo destino em coleções” é 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 “Tipagem pelo destino em coleções”?
Deixe o tipo de destino orientar a criação da 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 3 de 4.
Quanto tempo leva a aula “Tipagem pelo destino em coleções”?
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
- Sintaxe de expressões de coleção
- O elemento de expansão
- Tipagem pelo destino em coleções
- Construtores de coleções