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?