1
resposta

Mensagem inesperada em nameof

Escrevi o seguinte código no método ContaCorrente():

public ContaCorrente(int agencia, int numero)
        {
            if (agencia <= 0)
                throw new ArgumentException("O número da agência deve ser maior que 0.",nameof(agencia));               

            if (numero <= 0)
                throw new ArgumentException("O número da conta deve ser maior que 0.",nameof(numero));

            Agencia = agencia;
            Numero = numero;
            TotalDeContasCriadas++;
            TaxaOperacao = 30/ TotalDeContasCriadas;            
        }

No meu método Main(), escrevi o seguinte:

namespace ByteBank
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var conta = new ContaCorrente(0, 10);
            }
            catch (ArgumentException e)
            {
                Console.WriteLine("Ocorreu um erro do tipo ArgumentException");
                Console.WriteLine(e.Message);
            }
            Console.ReadLine();
        }
    }
}

A saída foi a mensagem:

"Ocorreu um erro do tipo ArgumentException

O número da agência deve ser maior que 0.

Nome do parâmetro: agencia"

Eu não esperava essa mensagem "Nome do parâmetro: agencia", porque eu não escrevi isso. Eu estava esperando somente a mensagem do argumento. Seria uma nova função do C#? Ele já dá o nome do parâmetro que gerou a exceção quando usamos a construção com nameof ?

1 resposta

o construtor da classe ArgumentException pega o parametro ParamName e monta a mensagem, o nameof não tem a ver, ele apenas evita que escreva o nome do parâmetro com string.

https://msdn.microsoft.com/pt-br/library/system.argumentexception(v=vs.110).aspx