私には2つの機能があります:
public void WithdrawMoney()
{
//Take money from bank account
//Exceptions abort the operation and are printed
//Rethrow exception if called by TransferMoney()
}
public void TransferMoney()
{
//Take money from one account and only deposit on another account if no exceptions were caught in WithdrawMoney()
WithdrawMoney();
DepositMoney();
}
私が欲しいのは、 TransferMoney()によって呼び出された場合にのみ、WithdrawMoney()で発生した例外を再スローできるようにすることです。アカウントからお金を引き出したいだけの場合は、例外を処理する必要がありますが、別の方法で呼び出されていないため、再スローする必要はありません。
boolsでの作業に加えて、私の頭に浮かぶ別の解決策があります。スタックトレースを調べて、TransferMoney()がWithdrawMoney()を呼び出したかどうかを確認し、呼び出した場合にのみ例外を再スローします。または、メソッドで例外が発生したかどうかを確認する方法はありますか?
例外をスローする前に、catchブロックで例外がスロー可能かどうかを確認できるかどうかを知りたいだけです。常にスローする場合、WithdrawMoney()を直接呼び出すと、例外は処理されません。