3
respostas

Duvidas com o Switch usando intervalos

Olá, tentei fazer o programa anterior de IR usando o Switch mas não tive exito, será que alguem poderia dar uma ajuda no meu código?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ImpostoDeRenda
{
    internal class Program
    {
        static void Main(string[] args)
        {

            // De 1900.0 até 2800.0, o IR é de 7.5% e pode deduzir na declaração o valor de R$ 142;
            // De 2800.01 até 3751.0, o IR é de 15 % e pode deduzir R$ 350;
            // De 3751.01 até 4664.00, o IR é de 22.5 % e pode deduzir R$ 636.

            Console.WriteLine("Programa para calculo de Imposto de Renda");
            double salario = 3300.0;
            switch (salario)
            {
                case 1900.0 to 2799.9:
                        Console.WriteLine("O IR é de 7.5%");
                        Console.WriteLine("Pode deduzir na declaração o valor de R% 142.00");
                    break;

                case 2800.0 to 3750.9:
                        Console.WriteLine("O IR é de 15%");
                        Console.WriteLine("Pode deduzir na declaração o valor de R$ 350.00");
                    break;

                case 3751.0 to 4663.9:
                        Console.WriteLine("O IR é de 22.5%");
                        Console.WriteLine("Pode deduzir na declaração o valor de R$ 636.00");
                    break;

                default:
                        Console.WriteLine("Valor fora do calculo.");
            }

            Console.ReadLine();
        }

    }
}

Sou iniciante e eu procurei alguma coisa na internet superficialmente mas não achei uma solução pra usar o switch nesse caso.

3 respostas

Ele começa a apresentar o erro em todos os " case " a partir do " to " até o " : " CS0103 "to" não existe no contexto atual; ":" Erro de sintaxe esperado; E sempre o segundo intervalo (valor) vem com um erro struct System.Double

Saudações Flávio!

Eu também estou iniciando, mas espero ajudar ainda que não seja a melhor solução.

Seguinte, para utilização do controle de fluxo com switch, precisamos utilizar os case como opções, (similar a um menu) não sendo possível incluir condicionais para validar a opção direto no case, então para este exemplo que você utilizou, entendo que teríamos que criar mais variáveis para utilizarmos como opções de seleção, e assim utilizar elas como escolhas para os cases e assim criar controles de fluxo com teste lógico, de forma que caso o salário esteja dentro da faixa desejada é retornado a opção para utilizarmos no switch.

Ex:

            int opcao1 = 1;
            int opcao2 = 2;
            double salario = 2800;

            if (salario >= 1900 && salario <= 2800)
            {
                salario = opcao1;
            }
            else if (salario >= 2800.01 && salario <= 3751.00)
            {
                salario = opcao2;
            }
            switch (salario)
            {
                case 1:
                    Console.WriteLine("O IR é de 7.5%");
                    Console.WriteLine("Pode deduzir na declaração o valor de R% 142.00");
                    break;

                case 2:
                    Console.WriteLine("O IR é de 15%");
                    Console.WriteLine("Pode deduzir na declaração o valor de R$ 350.00");
                    break;

                default:
                    WriteLine("[ERROR]");
                    break;

            }

Nesse caso, ele não tem muita utilidade como são muitos intervalos? Na aplicabilidade dele eu teria que criar um Case pra cada intervalo é isso? Ai compensa continuar apenas com o if e else.