Junior
Quais são os tipos de conversão de tipos em C#?
sobes.tech IA
Resposta da IA
Em C# existem dois tipos principais de conversão de tipos: explícita e implícita.
Conversão implícita
Acontece automaticamente quando o compilador tem certeza de que a conversão é segura e não causará perda de dados. Por exemplo, de um tipo com um intervalo menor para um com um intervalo maior.
// Conversão implícita de int para long
int i = 100;
long l = i;
Conversão explícita
Requer indicar no código o operador de conversão ((tipo)) e é usado quando a conversão pode levar à perda de dados ou lançar uma exceção. É necessária ao converter de um tipo com um intervalo maior para um com um menor ou entre tipos não relacionados.
// Conversão explícita de double para int
double d = 123.45;
int i = (int)d; // A parte decimal é descartada
// Conversão explícita de object para string
object obj = "Hello";
string s = (string)obj;
// Conversão usando os operadores as e is
object objAs = "World";
string sAs = objAs as string; // Retorna null se a conversão não for possível
if (objAs is string) // Verifica se o objeto é do tipo string
{
string sIs = (string)objAs;
}
Comparação de conversão explícita, as e is
| Operação | Descrição | Erro em caso de falha |
|---|---|---|
(Tipo) expressão |
Conversão explícita. Requer correspondência exata de tipo. | InvalidCastException |
expressão as Tipo |
Tenta converter o tipo. Funciona apenas para tipos de referência e tipos que permitem null. | Retorna null |
expressão is Tipo |
Verifica se a expressão pode ser convertida para o tipo especificado. | Valor booleano (true/false) |
Conversões personalizadas
O desenvolvedor pode definir seus próprios operadores de conversão explícita e implícita para tipos personalizados, usando as palavras-chave implicit e explicit.
// Exemplo de conversão implícita personalizada
public class Inches
{
public int Value { get; set; }
public static implicit operator Millimeters(Inches i)
{
return new Millimeters { Value = i.Value * 25 };
}
}
public class Millimeters
{
public int Value { get; set; }
}
// Uso
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Conversão implícita
// Exemplo de conversão explícita personalizada
public class Kilograms
{
public int Value { get; set; }
}
public class Pounds
{
public int Value { get; set; }
public static explicit operator Kilograms(Pounds p)
{
return new Kilograms { Value = (int)(p.Value / 2.20462) };
}
}
// Uso
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Conversão explícita