Esta classe possui diversos métodos para conversões de tipo. Veja um exemplo:
1 2 3 | decimal N = 123456.789m; string s; s = Convert.ToString(N); Console.WriteLine(s); |
Essa classe retorna um tipo cujo valor não equivale ao valor de um tipo especificado. Os tipos de base com suporte são Boolean, Char, SByte, Byte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Decimal, DateTime e String.
Um método de conversão existe para converter cada Tipo base para todos os outros tipos base. No entanto, a chamada real para um método de conversão específica pode produzir um dos quatro resultados, dependendo do valor do tipo base em tempo de execução e o tipo de base de destino. Esses quatro resultados são:
- Nenhuma conversão. Isso ocorre quando é feita uma tentativa para converter de um tipo a mesmo (por exemplo, chamando Convert.ToInt32(Int32) com um argumento de tipo Int32). Nesse caso, o método simplesmente retorna uma instância do tipo original.
- InvalidCastException. Isso ocorre quando uma conversão específica não tem suporte. Um InvalidCastException é lançada para as seguintes conversões:
- Conversões de Char a Boolean, Single, Double, Decimalou DateTime.
- Conversões de Boolean, Single, Double, Decimalou DateTime a Char.
- Conversões de DateTime para qualquer outro tipo exceto String.
- Conversões de qualquer outro tipo, exceto String, para DateTime.
- Uma conversão bem-sucedida. Para conversões entre dois diferentes tipos base não listados nos resultados anteriores, Tudodas as conversões de expansão bem como Tudodas as conversões de restrição que resultarem em uma perda de dados terá êxito e o método retornará um valor do tipo base destino.
- OverflowException. Isso ocorre quando uma restrição resulta de conversão em uma perda de dados. Por exemplo, tentando converter uma instância de Int32 cujo valor é 10000 para um tipo de Byte lança um OverflowException porque 10000 está fora do intervalo do tipo de dados Byte.
Uma exceção não será lançada se a conversão de um tipo numérico resultar em perda de precisão (ou seja, a perda de alguns menos dígitos significativos). No entanto, uma exceção será lançada se o resultado é Grande do que pode ser representado por tipo de valor de retorno do método de conversão específica.
Por exemplo, quando um Double é convertido em um Single, pode ocorrer a perda de precisão, mas nenhuma exceção é lançada. No entanto, se a magnitude do Double for muito grande para ser representado por um Single, uma exceção de estouro é lançada.
Veja outro exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | double dNumber = 23.15; try { // retorna 23 int iNumber = System.Convert.ToInt32(dNumber); } catch (System.OverflowException) { System.Console.WriteLine( "Overflow (estouro) na conversão de double para int."); } // retorna True bool bNumber = System.Convert.ToBoolean(dNumber); // retorna "23.15" string strNumber = System.Convert.ToString(dNumber); try { // retorna '2' char chrNumber = System.Convert.ToChar(strNumber[0]); } catch (System.ArgumentNullException) { System.Console.WriteLine("A String é nula (null)"); } catch (System.FormatException) { System.Console.WriteLine("A largura da String é maior que 1."); } // System.Console.ReadLine() retorna uma string a ser convertida int newInteger = 0; try { System.Console.WriteLine("Informe um valor inteiro:"); newInteger = System.Convert.ToInt32( System.Console.ReadLine()); } catch (System.ArgumentNullException) { System.Console.WriteLine("A String é nula (null)."); } catch (System.FormatException) { System.Console.WriteLine(" A String não contém um valor válido para conversão."); } catch (System.OverflowException) { System.Console.WriteLine( "Estouro na conversão de string para int."); } System.Console.WriteLine("O valor do inteiro informado convertido para double: {0}", System.Convert.ToDouble(newInteger)); |