1
resposta

Por que no unboxing náo é feita a conversão implícita do tipo short para int?

Bom dia!

Estou com uma dúvida em relação ao exemplo utilizado em um dos exercícios do curso:

01 int numero = 57;
 02 object referencia = numero;
 03 int valor = (short)referencia; 
 04 Console.WriteLine(valor);

No exemplo acima não é feita a conversão implícita do valor da variável referência após ser feito o cast, acontecendo um erro em tempo de execução. Qual seria o motivo do erro, visto que o c# permite a conversão implícita de um valor short para um valor int?

Agradeço desde já.

1 resposta

Olá Felipe,

O método de Unboxing deve ser feito para o exato tipo de valor original.

Não tem erro na compilação, pois está forçando a conversão com o cast (short)referencia, ou seja, está fazendo uma conversão explícita do tipo objectpara o tipo short, em outras palavras, você está dizendo ao compilador que está esperando um objeto do valor short, mas na execução o compilador recebe um valor do tipo int e aí está o erro.

Nesse caso você deveria ter feito o unbox para o tipo int novamente e depois a conversão implícita para o tipo short. Não tem como fazer o unbox e a conversão implícita ao mesmo tempo.

Entretanto, existe a classe Convert. Você poderia passar a variável referencia para a função Convert.ToInt16, retornando o tipo short e aí fazendo a conversão implícita.

        int numero = 57;
         object referencia = numero;
         int valor = Convert.ToInt16(referencia);
         Console.WriteLine(valor);

Espero ter ajudado.

Zambon.