2013-01-09 4 views
2

나는 약간 혼란 스럽다. MSDN이 경우 ArgumentException에 대한 말씀을유효성 검사 메서드가 유효성 검사 결과를 반환해야하는 경우 ArgumentException 클래스가있는 이유는 무엇입니까?

은 다음과 같습니다

". 방법에 제공되는 인수 중 하나가 유효하지 않은 경우에 슬로우되는 예외입니다"

그래서 내 메서드에 전달 된 인수가 유효하지 않은 경우 예외가 발생합니다.

그러나 나는 또한 이유에 대한 부울과 문자열을 반환하는 것이 좋습니다 것을 알게되었습니다. - 예외를 던지기보다는.

그래서,

질문 : 메서드 매개 변수를 validationg 및 매개 변수가 유효하지 않을 때 말아야 때, 때 유효성 검사 방법은 예외를 던져해야합니까?

+1

"부울을 반환하는 이유와 이유가있는 문자열을 제안합니다."링크를 사용하여 읽은 위치를 인용하는 것이 도움이됩니다. –

+1

예를 들어 ... http://stackoverflow.com/questions/5230978/is-it-a-good-practice-to-throw-an-exception-on-validate-methods-or-better-to-r – pencilCake

+1

이전 질문은이 질문과 어떻게 다른가요? –

답변

9

유효한 인수 (예 : 유효한 사용자 이름/암호 조합)를 확인하는 것이 목적의 메서드 인 경우 반드시 부울 (false = invalid)과 이유를 반환하십시오. 예상 상황에 대한 예외를 throw하지 마십시오 (예상하지 못한 이유가 무엇인가?)

"프로세스"방법이있는 경우 상황이 다릅니다. 올바른 매개 변수가 있어야하므로 유효하지 않은 예외 (문제를 진술).

+0

+1 동의. 그러나 문자열 IMO가있는 bool을 반환해야하는 경우 bool 및 문자열을 함께 캡슐화하는 클래스를 반환해야합니다. 출력 매개 변수를 사용하지 마십시오. 누군가 코드를 유지 보수하거나 리팩터링 할 때 두통을 유발할뿐입니다. – nashwan

+0

@nashwan : 클래스가 실패 원인을 캡슐화하는 장점은 파생 클래스가 특정 유형의 실패에 적용 가능한 정보를 더 많이 포함 할 수 있다는 것입니다. – supercat