C# - Conversão entre tipos : implícita e explícita - II
Hoje vamos continuar abordando o conceito de conversão implícita e explícita na linguagem C#. |
Continuando a primeira parte do artigo, temos que na linguagem C #, ao realizar uma conversão entre tipos , se os tipos de dados são compatíveis, então o C# realiza a conversão automática caso contrário é necessário realizar uma conversão explicíta.
Assim a conversão implicita acontece quando :
1- Os dois
tipos de dados são compatíveis.
2- Quando atribuímos o valor de um tipo de dados menor
a um tipo de dados maior.
Por exemplo, os tipos de dados numéricos são compatíveis entre si, mas nenhuma conversão automática é suportada pelo tipo numérico para char ou booleano. Eles não são compatíveis entre si. Antes da conversão, o compilador verifica primeiro a compatibilidade conforme a figura abaixo e então decide se a conversão é possível ou lançara um erro.
Converte do Tipos de dados | Para o Tipo de dados |
---|---|
byte | short, int, long, float, double |
short | int, long, float, double |
int | long, float, double |
long | float, double |
float | double |
Quando os tipos não são compatíveis vai ocorrer um erro de compilação. Por exemplo , double é incompatível com int.
Exemplo:
public static void Main(String []args)
{
double d = 765.12;
// Tipo de dados incompatível
int i = d;
// resultado
Console.WriteLine("Valor de i é ", +i );
}
|
Aqui teremos novamente o erro: "Cannot implicitly convert type 'long' to 'int'. An explicit conversion exists(are you missing a cast?)"
Portanto, se
queremos atribuir um valor de tipo de dados maior a um tipo de dados menor,
devemos executar a conversão explícita de tipos.
Isso é útil para tipos de dados incompatíveis em
que a conversão automática não pode ser feita. Aqui, o tipo de destino
especifica o tipo desejado para o qual converter o valor especificado, e pode,
às vezes, resultar na conversão com perdas.
Exemplo:
public static void Main(String []args)
{
double d = 765.12;
// Tipo de dados incompatível
int i = (int)d;
// resultado
Console.WriteLine("Valor de i é ", +i );
}
|
O resultado obtido será 765 ocorrendo assim perda de 0.12.
Outros métodos para realizar
a conversão entre tipos
A linguagem C# oferece métodos prontos para realizar a conversão entre tipos. A
seguir temos uma tabela exibindo os principais:
Método | Descrição |
---|---|
ToBoolean | Converte para um valor Boolean |
ToChar | Converte para um character |
ToByte | Converte para Byte |
ToDecimal | Converte o valor para Decimal |
ToDouble | Converte para double |
ToInt16 | Converte para int de 16-bit |
ToInt32 | Converte para int de 32 bit |
ToInt64 | Converte para int de 64 bit |
ToString | Converte para string |
ToUInt16 | Converte para um int unsigned de 16 bit |
ToUInt32 | Converte para um int unsigned de 32 bit |
ToUInt64 | Converte para um int unsigned de 64 bit |
Exemplo de utilização:
public static void Main(String []args)
{
int i = 12;
double d = 765.12;
float f = 56.123F;
Console.WriteLine(Convert.ToString(f));
Console.WriteLine(Convert.ToInt32(d));
Console.WriteLine(Convert.ToUInt32(f));
Console.WriteLine(Convert.ToDouble(i));
Console.ReadKey();
}
|
Além desses métodos cada tipo possui o Parse que permite converter strings para o tipo especificado:
Na verdade ao usar o Convert ele chama o método Parse, mas possui a vantagem de verificar se o tipo não é um null, coisa que o Parse, que embora seja mais rápido, não faz.
Assim para converter uma string para um número podemos usar o Convert, o Parse e também o TryParse.
Os métodos Parse e TryParse ignoram o espaço em branco no início e no final da string; porém, todos os outros caracteres devem formar o tipo numérico correto (int, long, ulong, float, decimal etc.).
Qualquer espaço em branco na cadeia de caracteres que forma o número causará um erro.
Por exemplo, é possível usar decimal.TryParse para analisar "10", "10,3" ou " 10 ", mas não é possível usar esse método para analisar 10 de "10X", "1 0" (observe o espaço inserido), "10 .3" (observe o espaço inserido), já o valor "10e1", usando float.TryParse funcionará, e assim por diante.
Além disso, uma cadeia de caracteres cujo valor seja null ou String.Empty falhará ao ser analisada com êxito. Você pode verificar uma string nula ou vazia antes de tentar analisá-la chamando o método String.IsNullOrEmpty.
Para detalhes veja o meu artigo : C# - Diferença entre int.Parse() e int.TryParse() - Macoratti
E estamos conversados.
Colossenses 2:2,3
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
C# - StreamReader, StringReader e TextReader . Qual a ... - Macoratti
C# - Imprimindo um arquivo texto - Macoratti
C# - Usando OpenFileDialog - Macoratti
C# - Formatando arquivos textos - Macoratti
C# - Convertendo valores para o formato monetário
C# - Lendo e escrevendo em arquivos textos e binários - Macoratti
VB.NET - Conversão entre tipos de variáveis - Macoratti
C# - Localizando Arquivos - Macoratti