0Pricing
C# Academy · Aula

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

Tipagem 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); // 3

Inferê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.5

Interfaces 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); // 3

Operador 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,3

var 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); // 3

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

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

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

Verificaçã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.
  • var nã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

  1. Sintaxe de expressões de coleção
  2. O elemento de expansão
  3. Tipagem pelo destino em coleções
  4. Construtores de coleções
← Voltar para C# Academy