private void ProcessData(IProcessor processor)
{
Data data = new Data();
try
{
processor.Process(data);
}
catch(Exception e)
{
CustomCode(e);
}
}
콘크리트 IProcessor processor.Process
메소드 구현 :잡기 예외를 여러 번 - C#
public void Process(Data data)
{
try
{
Thing a = null;
a.MakeSomething();
}
catch(NullPointerException e)
{
DoSomething();
}
}
내가 모든 (ProcessData()
방법 또는 "시도"블록 모두 나오는 모든 예외에 대한 CustomCode()
방법을 실행하고 싶습니다 호출 스택의 코드 ProcessData()
에서 예외를 throw하는 스택 끝까지 여러 예외 처리기에서 처리해야합니다.이 예제에서는 DoSomething()
및 CustomCode()
을 실행해야합니다. 어떻게해야합니까? 나는 "던지기"를 더할 수 있다는 것을 안다. "DoSomething();
"이후이지만 프로세서의 모든 구현에서 모든 프로그래머는 항상 "throw;"라고 쓰는 것을 기억해야합니다. 캐치 (...)에 을 입력하면 CustomCode(e)
이 실행될 수 있습니다. 어떻게 든 더 잘할 수 있습니까?
예외 상황에 관계없이 항상 customerCode가 발생하게하려면 설계상의 결함이 있습니다. try()에서 try catch를 제거하고 processdata()가 처리하도록하십시오. 예외가 처리 된 경우 처리 할 대상을 선택해야합니다. – Seabizkit
당신은 * NullReferenceException을 잡아서는 안됩니다. (NPE는 자바입니다. 아니면 당신 자신의 예외 클래스를 가지고 있습니까?) * 피하십시오 *. 따라서 예외를 전혀 신경 쓰지 않아도됩니다. – HimBromBeere
Seabizkit 다른 IProcessor 구현이 있습니다. 그 중 하나에서 데이터베이스 트랜잭션을 커밋합니다. 이 트랜잭션을 커밋 한 후에 예외가 발생하면이 트랜잭션을 롤백하고 싶습니다. 각 IProcessor 구현에는 Process (Data 데이터)가 수행중인 작업에 따라 다른 예외 처리 코드가 있어야합니다. – Zygmuntix