1
resposta

[Dúvida] Como fazer para mostrar ao usuário qual parâmetro exatamente está errado?

Pessoal, no caso, eu queria tentar mostrar ao usuário qual parâmetro está errado, se é número de agência ou o número da conta ou se é os dois. Como faço isso?

Eu tentei fazer sozinho mas ele está apenas mostrando um dos erros e não os dois quando crio uma conta com os dois parâmetros errados, acho que é devido a condicional OU que inseri no if, porém não estou conseguindo consertar isso.

Alguém me ajuda? Seguem os códigos:

Código na classe ContaCorrente:

public ContaCorrente(int numero_agencia, string numero_conta)
        {
            this.numero_agencia = numero_agencia;
            this.Conta = numero_conta;
           
            if(numero_agencia <= 0 || string.IsNullOrEmpty(numero_conta) ||numero_conta.Length <= 0)
            {
                if(numero_agencia <= 0)
                {
                    throw new ArgumentException("O número da agência deve ser maior que zero!", nameof(numero_agencia));
                }
                else
                {
                    throw new ArgumentException("O número da conta corrente deve ter um comprimento maior que zero!", nameof(numero_conta));
                }
            }

Código no Program.cs:

try
{
    ContaCorrente conta1 = new ContaCorrente(0, ""); //aqui entram os dois parâmetros: numero_agencia e o numero_conta
}
catch(ArgumentException ex)
{
    Console.WriteLine($"Erro: {ex.Message}");
    Console.WriteLine($"Parâmetro com erro: {ex.ParamName}");
    
}
1 resposta

Olá Wellington, tudo bem?

Para mostrar ao usuário qual parâmetro está errado, você pode utilizar uma mensagem de erro específica para cada caso. No seu código, você já está utilizando a classe ArgumentException para lançar uma exceção caso algum dos parâmetros esteja inválido. Então, basta alterar as mensagens de erro para informar qual parâmetro está com problema.

Por exemplo, no trecho de código onde você lança a exceção para o número da agência, você pode alterar a mensagem para:

throw new ArgumentException("O número da agência deve ser maior que zero!", nameof(numero_agencia));

E no trecho onde você lança a exceção para o número da conta, você pode alterar a mensagem para:

throw new ArgumentException("O número da conta corrente deve ter um comprimento maior que zero!", nameof(numero_conta));

Dessa forma, quando a exceção for lançada, a mensagem de erro irá informar qual parâmetro está com problema.

Quanto ao problema de mostrar apenas um dos erros, isso ocorre porque você está utilizando um if com operador OU (||). Ou seja, se qualquer uma das condições for verdadeira, a exceção será lançada. Para lançar uma exceção para cada parâmetro inválido, você pode utilizar um if para cada parâmetro. Algo como:

if(numero_agencia <= 0)
{
    throw new ArgumentException("O número da agência deve ser maior que zero!", nameof(numero_agencia));
}

if(string.IsNullOrEmpty(numero_conta) || numero_conta.Length <= 0)
{
    throw new ArgumentException("O número da conta corrente deve ter um comprimento maior que zero!", nameof(numero_conta));
}

Assim, se ambos os parâmetros estiverem inválidos, serão lançadas duas exceções, uma para cada parâmetro.

Espero ter ajudado e bons estudos!