C#으로 된 프로젝트가 UI 레이어와 비즈니스 레이어로 나뉘어져 있습니다. 기본적으로 계정을 선택하고 입금 번호를 입력 할 수있는 양식이 있습니다. 확인 버튼을 클릭하면 DepositTransaction.cs가 트랜잭션을 처리합니다. 그러나, 상기 시도, 양식에 오류를 통과하지 않는 DepositTransactionC# 클래스에서 던져진 예외를 C# 폼에 전달하는 방법
public override void DoTransaction() {
try {
if (Amount <= 0) { //Amount is the amount passed by the form
throw new InvalidTransactionAmtNegativeException();
}
if (acc.Active == false) { //acc is the account passed by the form
throw new AccountInactiveException();
}
acc.Credit(Amount);
Summary = string.Format("{0} {1}", Date.ToString("yyyy-MM-dd"), this.TransactionType);
this.setStatus(TransactionStatus.Complete);
} catch (InvalidTransactionAmtNegativeException ex) {
throw;
} catch (AccountInactiveException ex) {
throw;
}
}
에 대한
private void buttonOK_Click(object sender, EventArgs e) {
try {
bool inputTest;
decimal amount;
inputTest = decimal.TryParse(textBoxAmount.Text, out amount);
if (inputTest == false) {
throw new InvalidTransactionAmtException();
} else {
BankAccount account = comboBoxAccount.SelectedItem as BankAccount;
deposit = new DepositTransaction(account, amount);
this.DialogResult = DialogResult.OK;
}
} catch (InvalidTransactionAmtException ex) {
errorProviderDeposit.SetError(textBoxAmount, ex.Message);
textBoxAmount.Select();
textBoxAmount.SelectAll();
} catch (InvalidTransactionAmtNegativeException ex) {
errorProviderDeposit.SetError(textBoxAmount, ex.Message);
textBoxAmount.Select();
textBoxAmount.SelectAll();
} catch (AccountInactiveException ex) {
errorProviderDeposit.SetError(textBoxAmount, ex.Message);
textBoxAmount.Select();
textBoxAmount.SelectAll();
}
}
그리고 지금 샘플 코드 : 여기
는 DepositForm에 대한 샘플 코드입니다. 예외가 처리되지 않았다고 말하는 프로그램이 충돌합니다.나는 오류를 전달하는 방법을 언급 한 stackoverflow에 대한 또 다른 질문은 단지 throw:
을 사용한다는 것을 알았고 그 오류는이 클래스를 (내 경우에는 양식에서) 호출 한 클래스에 전달되며 형태.
내가 뭘 잘못하고 있니? 는
'InvalidTransactionAmtNegativeException (message);을 (를) 던져보십시오.' 오류 메시지를 설정합니다. – Prasanth
예외의 스택 추적을 게시해야합니다. – tallseth
DoTransaction은 buttonOK_Click을 catch하지 않는 예외를 throw 할 가능성이 큽니다. 가능한 모든 예외를 잡으려면 catch (Exception ex)를 추가해야합니다 (다른 곳에서 마지막 기회 핸들러가없는 경우). 그런데 DoTransaction의 끝에서 catch 절은 완전히 불필요합니다. – holmes