Quando usamos casting com () e caso não seja possível realizar o casting, uma exceção
do tipo InvalidCastException será lançada gerada.
Esse casting sempre deve ser usado quando temos certeza de que o valor em que aplicamos o
casting sempre será um válido.
O tratamento de erro no casting em questão deve ser feito utilizando um bloco try-catch que
pode ser visto em #: Tratando Erros > Try-Catch.
Exemplo 8
using System;
public class HelloWorld
{
static void Main()
{
object val = "string";
int valor = (int)val;
}
}
Saída
Unhandled exception. System.InvalidCastException: Unable to cast object of type 'System.String' to type 'System.Int32'.
at HelloWorld.Main()
Quando usamos o operador as, caso o casting não seja possível, um valor null é
retornado pelo operador ao invés de ser lançada uma exceção. Um tipo de dado
nullable deve ser usado nesse caso.
Esse casting sempre deve ser usado quando não temos certeza de que o valor em que aplicamos
o casting será um válido.
Exemplo 9
using System;
public class HelloWorld
{
static void Main()
{
object obj1 = "um object string";
object obj2 = obj1 as string;
Console.WriteLine(obj2); //string -> string OK!!
obj2 = obj1 as int?; //string -> int NOK!!
Console.Write(obj2 == null);
}
}
Saída
um object string
True
O tratamento de erro no casting em questão pode ser feito utilizando
comandos de decisão
em que uma validação pode ser feita para exibição de mensagens de erro, por exemplo.