Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Exercício Aula 03 - Estrutura de controle com C#

Pessoal,

No meu exercício, eu deixei a minha variável imposto propositalmente declarada sem nada, então ocorre a mensagem de erro "Use of unassigned local variable imposto", o que o c# quer dizer com isto? Parei para refletir isso, quer dizer que toda variável deve ser declarada com algo no começo, ou nem sempre? No exemplo do professor, esta sem valor iniciado, já no meu programa, sou obrigado a declarar igual a zero.

private void button1_Click(object sender, EventArgs e)
        {
            double valorDaNotaFiscal = 5000.0;
            double imposto;

            if (valorDaNotaFiscal < 1000)
            {
                imposto = valorDaNotaFiscal * (0.02 / 100);

            }
            else if (valorDaNotaFiscal >= 1000 && valorDaNotaFiscal < 3000)
            {
                imposto = valorDaNotaFiscal *  (0.025 / 100);

            }
            else if (valorDaNotaFiscal >= 3000 && valorDaNotaFiscal < 7000)
            {
                imposto = valorDaNotaFiscal * (0.028 / 100);

            }
            else if (valorDaNotaFiscal >= 7000)
            {
                imposto = valorDaNotaFiscal * (0.03 / 100);

            }

            MessageBox.Show("Imposto a ser pago: " + imposto);
        }

Gostaria de ter um entendimento disto! Obrigado.

2 respostas
solução!

Olá Leandro,

no caso o código está dando o erro "Use of unassigned local variable imposto" porque ele não tem certeza que a variável imposto terá algum valor quando ele fizer o MessageBox. Variáveis locais, como o imposto no método, acabam não tendo um valor default. E note que todos as condições tem um if, ou seja, não existe nenhum else geral para caso todos os ifs anteriores tenham dado false. Para o compilador então existe o risco dele chegar lá embaixo sem valor nenhum se ele não cair em nenhum if.

No caso do código apresentado na aula, a última condição do valor da nota ser maior ou igual a 7000 é apenas

else
{
       imposto = 0.03;
}

pois agora sim o compilador terá certeza que a variável imposto terá um valor independente do que acontecer.

Obrigado Lucas pelo entendimento, foi muito bem explicativo que fechou o meu entendimento.