Conversão entre tipos de dados

A conversão de tipos de dados em C# é fundamental para manipular valores de diferentes tipos, seja para cálculos, entrada de dados ou interoperabilidade entre APIs. Existem diversas formas de conversão, cada uma apropriada para diferentes situações.

Tipos de Conversão em C#

Conversão Implícita

Ocorre automaticamente quando não há risco de perda de dados e os tipos são compatíveis (por exemplo, de um tipo menor para um maior).

Exemplo:

int numero = 123; 

double valor = numero; // Conversão implícita de int para double

Não é necessário nenhum código especial, pois o compilador faz a conversão por você.

Conversão Explícita (Casting)

Necessária quando pode haver perda de dados ou os tipos não são totalmente compatíveis.

Utiliza-se o operador de cast: (tipo)valor.

Exemplo:

double valor = 123.45; 
int numero = (int)valor; // Conversão explícita, parte decimal é descartada

Use casting com cuidado para evitar perda de dados ou exceções.

Conversão com Classes Auxiliares

Para converter tipos incompatíveis (ex: string para int), utilize classes como Convert ou métodos específicos como int.Parse().

Exemplo:

string texto = "42"; 
int numero = Convert.ToInt32(texto); // Converte string para int

Muito útil para processar entradas do usuário, que normalmente chegam como string.

Conversão em Coleções (LINQ)

Métodos como ToList(), ToArray(), Cast<T>() e OfType<T>() permitem converter coleções de um tipo para outro em consultas LINQ.

Exemplo:

var numeros = new List<string> { "1", "2", "3" }; 
var inteiros = numeros.Select(s => int.Parse(s)).ToList(); // Converte cada string em int

Útil para manipulação e transformação de dados em coleções.

Resumo das Principais Formas de Conversão

Tipo de ConversãoComo FazerQuando Usar
ImplícitaAtribuição diretaTipos compatíveis e sem risco de perda de dados
Explícita (cast)(tipo)valorQuando pode haver perda de dados ou tipos incompatíveis
Classe ConvertConvert.ToTipo(valor)Converter entre tipos básicos, especialmente strings
Métodos Parse/TryParseint.Parse(), int.TryParse()Converter string para tipos numéricos
LINQToList(), ToArray(), Cast<T>()Converter coleções

Dicas Importantes

  • Sempre que possível, prefira conversões implícitas para evitar erros.
  • Use conversão explícita e métodos auxiliares com cuidado, validando os dados antes da conversão.
  • Ao converter strings para tipos numéricos, utilize TryParse para evitar exceções em caso de dados inválidos.