2013-08-28 2 views
3

하나의 클래스에서 예외를 throw 할 수 있으며 C#에서 별도의 예외 클래스로 모든 예외를 catch 할 수 있습니까?오류 메시지를 예외로 처리

이제 내 질문은 언제나 값 == null이 될 때 우리는 메시지 자체를 표시합니다. 이제 값이 null 인 경우 예외를 사용해야합니다. 은 내가

if(customer == null) 
     throw new CustomerNullException(); 
if(incometype == null) 
     throw new IncomeTypeNullException(); 

지금은 별도의 클래스에서 이러한 예외를 처리 할 수 ​​

같은 예외를 던질 수 있습니까 ??

답변

0

일반적인 흐름으로 예외를 던져서는 안됩니다. 특히 그것이 일어난 장소와 이유를 아는 경우에 특히 그렇습니다. 당신이 경우에 HandleProblems라는 클래스를 만들고 그 클래스에 오류를 보낼 수 있습니다. 예외를 던지거나 catch하는 것이 더 비싸고 메서드를 호출 할 필요가 없습니다.

public class Log 
    { 
     public static void WriteLine(string errorMsg) 
     { 
     string err = DateTime.Now.ToString("dd/MM/yyyy hh:mm") + " - " + errorMsg; 

     if (File.Exists("@d:\log.txt") == false) 
     { 
      File.Create("@d:\log.txt"); 
     } 

     using(StreamWriter writer = new StreamWriter("@d:\log.txt", true)) 
     { 
      writer.WriteLine(err); 
     } 
     } 
    } 
+0

내 작업은 모든 오류 메시지를 한 가지로 그룹화 할 수 있도록 해당 클래스의 코드를 줄이는 것입니다. – user2619542

+0

@ user2619542 다른 경우에 대한 모든 오류 처리를 수행하는'ErrorHandler' 라이브러리를 작성해야합니다. – Mayank

+0

그 클래스에서와 마찬가지로 우리는 에러 메시지를 표시해야하는 checkcustomer() 메소드에서 에러 메시지를 작성해야합니까? @Mayank – user2619542

0

예외 처리는 오류를 처리하는 것이 좋습니다. 예외 처리에는 엄청난 오버 헤드가 있으므로 오류 처리 아키텍처를 재고해야합니다. Jon Skeet 저의 Exceptions and Performance을 읽으십시오.

+0

"경고 처리"에 대해 말하고 싶습니까? 오류 처리는 * 예외 *에 대한 것이지만 정상적인 작업에서는 기대하지 않을 것이고 (throwing 클래스의 관점에서) 복구 할 수없는 예외적 인 오류를 위해 예약되어야합니다. –

+0

@ StephenJ.Anderson 예외 처리는 오류 처리를위한 것이지만 줄을 기다리는 try/catch 블록이 있기 때문에 예외가 왼쪽 및 오른쪽으로 throw되어야한다는 것을 의미하지는 않습니다. 예외는 적당히 사용해야하며 제대로 사용하면 매우 유용합니다. – Mayank

0

예외는 예외적 인 경우에만 저장해야합니다 (예 : 개). 스택 추적을 포함하여 예외가 저장하고 전달하는 메타 데이터 때문에 성능이 매우 강력합니다. 결과적으로 디버깅 할 때 일반적으로 발생하지 않는 오류를 잡아서 처리해야하지만 (매개 변수가 null이 아니어야하는 경우 매개 변수가 전달되는 경우에 대비해야합니다.) 그들은 프로그램의 규칙적인 기능을 위해 좋지 않습니다.

정상적인 프로그램 기능에서 자르기를 기대하는 특별한 오류 상황이있는 경우 원하는 오류 매개 변수를 전달하거나 일종의 유효성 검사를 사용하는 자체 오류 처리기 클래스를 외부에서 사용하십시오. 빈 데이터 구조에 myCollection.pop과 같은 작업을 수행하면 예외를 throw 할 필요가 없습니다. 어떤 이유로 든 프로그램에서 콜렉션이 비어 있는지 확인할 수 없기 때문입니다. 그러나 return Null과 같은 것을 할 수 있으며 errorHandler 클래스를 호출하여 데이터 구조가 비어있을 때 필요한 모든 작업을 수행 할 수 있습니다.