Desconstrução
Desempacote tuplas em variáveis separadas.
Desconstrução é 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 é desconstrução?
Desconstrução divide uma tupla (ou objeto) em variáveis separadas em uma única instrução, para que você possa nomear cada parte diretamente.
using System;
class Program
{
static void Main()
{
var point = (3, 4);
(int x, int y) = point;
Console.WriteLine("x=" + x + ", y=" + y);
}
}Desconstruindo uma tupla
Coloque as variáveis de destino entre parênteses à esquerda de =. Cada uma recebe o elemento correspondente da tupla.
using System;
class Program
{
static void Main()
{
var user = ("Ada", 36);
(string name, int age) = user;
Console.WriteLine(name + " is " + age);
}
}Usando var na desconstrução
Você pode deixar o compilador inferir os tipos usando var, seja para cada variável, seja para o grupo inteiro.
using System;
class Program
{
static void Main()
{
var data = (1, "one", true);
var (id, word, flag) = data;
Console.WriteLine(id + " " + word + " " + flag);
}
}Desconstruindo o resultado de um método
Você pode desconstruir diretamente a tupla retornada por um método em variáveis nomeadas.
using System;
class Program
{
static (int, int) MinMax(int a, int b) => a < b ? (a, b) : (b, a);
static void Main()
{
var (lo, hi) = MinMax(8, 3);
Console.WriteLine("min=" + lo + ", max=" + hi);
}
}Descartando valores
Use um sublinhado _ para ignorar as partes de que você não precisa durante a desconstrução.
using System;
class Program
{
static (int, int, int) Rgb() => (255, 128, 0);
static void Main()
{
var (r, _, _) = Rgb();
Console.WriteLine("Red channel: " + r);
}
}Desconstruindo em variáveis existentes
Você pode atribuir valores a variáveis já declaradas omitindo os nomes dos tipos.
using System;
class Program
{
static void Main()
{
int a = 0, b = 0;
(a, b) = (10, 20);
Console.WriteLine(a + ", " + b);
}
}Trocando valores com tuplas
Um truque útil: troque duas variáveis em uma única linha usando a desconstrução de tuplas, sem precisar de uma variável temporária.
using System;
class Program
{
static void Main()
{
int x = 1, y = 2;
(x, y) = (y, x);
Console.WriteLine("x=" + x + ", y=" + y);
}
}O método Deconstruct
Suas próprias classes podem aceitar desconstrução definindo um método Deconstruct com parâmetros out.
using System;
class Point
{
public int X, Y;
public Point(int x, int y) { X = x; Y = y; }
public void Deconstruct(out int x, out int y)
{
x = X;
y = Y;
}
}
class Program
{
static void Main()
{
var p = new Point(5, 9);
var (px, py) = p;
Console.WriteLine(px + ", " + py);
}
}Várias sobrecargas de Deconstruct
Uma classe pode oferecer várias sobrecargas de Deconstruct que expõem diferentes quantidades de valores.
using System;
class Person
{
public string Name; public int Age; public string City;
public Person(string n, int a, string c) { Name = n; Age = a; City = c; }
public void Deconstruct(out string name, out int age)
{
name = Name; age = Age;
}
}
class Program
{
static void Main()
{
var p = new Person("Ada", 36, "London");
var (name, age) = p;
Console.WriteLine(name + ", " + age);
}
}Desconstrução em foreach
Ao percorrer uma coleção de tuplas, você pode desconstruir cada elemento diretamente no cabeçalho de foreach.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pairs = new List<(string, int)>
{
("Ann", 30),
("Bob", 25)
};
foreach (var (name, age) in pairs)
Console.WriteLine(name + " is " + age);
}
}Reunindo tudo
A desconstrução torna mais clara a leitura do código que retorna ou armazena vários valores, nomeando cada parte no ponto de uso.
using System;
class Program
{
static (int Quotient, int Remainder) Divide(int a, int b) => (a / b, a % b);
static void Main()
{
var (q, r) = Divide(17, 5);
Console.WriteLine("17 / 5 = " + q + " remainder " + r);
}
}Verificação rápida
Teste sua compreensão sobre desconstrução.
Recapitulação
Desconstrução divide uma tupla ou um objeto em variáveis nomeadas em uma única instrução. Use var (a, b) = ..., descarte partes com _, troque variáveis e desconstrua em foreach. Classes personalizadas podem aceitar esse recurso com um método Deconstruct que usa parâmetros out, opcionalmente sobrecarregados.
using System;
class Program
{
static void Main()
{
var (a, b, c) = (1, 2, 3);
Console.WriteLine(a + b + c);
}
}Perguntas Frequentes
A aula “Desconstrução” é grátis?
Sim — o texto completo de “Desconstrução” é 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 “Desconstrução”?
Desempacote tuplas em variáveis separadas. 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 “Desconstrução”?
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
- Fundamentos das tuplas de valor
- Elementos nomeados de tuplas
- Desconstrução
- Tuplas como valores de retorno de métodos