Nesse exercício, somos recomendados a criar uma ArgumentException que impeça a transferência de valor igual ou menor que 0:
public void Transferir(double valor, ContaCorrente contaDestino)
{
if (valor < 0)
{
throw new ArgumentException("Valor inválido para a transferência.", nameof(valor));
}
Sacar(valor);
contaDestino.Depositar(valor);
}Porém, eu já tinha no meu código a ArgumentException que também impedia que o número da agência ser igual ou menor que 0. Portanto, meu código em ContaCorrent.cs ficou assim: (omiti partes do código que creio serem irrelevantes para a dúvida)
public ContaCorrente(int numero_agencia, string numero_conta, double saldo)
{
this.numero_agencia = numero_agencia;
this.Conta = numero_conta;
this.saldo = saldo;
if (numero_agencia <= 0)
{
throw new ArgumentException("O número da agência deve ser maior que 0", nameof(numero_agencia));
}
public bool Transferir(double valor, ContaCorrente destino)
{
if (valor >= saldo)
{
ContadorTransferenciasNaoPermitidas++;
throw new SaldoInsuficienteException("Saldo insuficiente para essa transação");
}
else if (valor <= 0)
{
ContadorTransferenciasNaoPermitidas++;
throw new ArgumentException("O valor da transferência deve ser maior que 0", nameof(valor));
}
else
{
Sacar(valor);
destino.Depositar(valor);
return true;
}
}E o bloco try-catch-finally no meu program.cs ficou assim:
try
{
ContaCorrente contaMatheus = new ContaCorrente(42, "1428-7", 238);
contaMatheus.Sacar(50);
Console.WriteLine(contaMatheus.GetSaldo());
contaMatheus.Sacar(10);
Console.WriteLine(contaMatheus.GetSaldo());
ContaCorrente contaArthur = new ContaCorrente(34, "2862-7", 300);
//Console.WriteLine(contaArthur.Transferir(0, contaMatheus));
Console.WriteLine(contaArthur.Transferir(0, contaMatheus));
}
catch (ArgumentException ex)
{
//Console.WriteLine(ex.ParamName);
//Console.WriteLine(ex.StackTrace); // Nos diz de onde vem a exceção, e onde ela foi lançada
Console.WriteLine("O número da agência deve ser maior que 0");
Console.WriteLine(ex.Message);
}
catch(SaldoInsuficienteException ex)
{
Console.WriteLine("Operação negada. Saldo insuficiente!");
Console.WriteLine(ex.Message);
} Portanto, o resultado da compilação foi esse:
Notem que a mensagem em ArgumentException ""O número da agência deve ser maior que 0" apareceu, já que essa exceção foi chamada.
Sei que eu poderia simplesmente tirar essa mensagem do bloco catch, mas lá vem (finalmente) minha dúvida:
É normal/bom hábito ter essas duas ArgumentException podendo ser chamadas pelo mesmo bloco, já que cada uma delas tem sua Message?
Qual seria a melhor forma de lidar com essa situação?