2009-09-01 3 views
2

SSH를 통해 Linux 서버에서 외부 명령을 실행하는 C# 유틸리티 클래스를 개발 중입니다. (나는 지금까지 그것을 좋아하고 추천합니다. SharpSSH을 사용하고 있습니다.) 명령의 출력을 기반으로 의미있는 정보를 제공합니다.외부 명령 출력이 엉뚱한 경우 던져 버리는 것이 가장 좋은 예외입니까?

위 출력의 일부는 절대 범위를 벗어나서는 안되는 정수이지만 그럴 가능성을 방지하려고합니다. 수신 된 숫자가 실제로 범위를 벗어나는 경우 던지기에 더 좋은 예외는 무엇입니까? 나는 ArgumentOutOfRangeException을 생각하고있다. 그러나 그것은 정말로 논쟁이 아니다. 자동 완성은 나에게 어떤 좋은 후보도주지 않습니다. 어떤 제안?

+0

사용자가 적절하게 처리되고 검토 할 로그가있는 한 정말 중요합니까? –

답변

2

발생한 예외의 종류는 두 가지 이유에만 관련이 있습니다 :

  1. 당신 (또는 소비자) 어떤 경우에 예외를 잡을 어떻게 든 프로그램 적 캐치() 블록에 대응하려는.
  2. 프로그래밍 방식으로 응답 할 수없는 특정 문제가 발생할 때 호출자에게 명확한 추가 정보를 원합니다.

그래서,이 코드의 소비자가 특정 예외를 캐치 할 수 있다고 생각하는 경우, 귀하의 질문에

  1. 응답, 어떻게 든 그것을 처리의와 Exception에서 상속 사용자 정의 예외를 만들 수 있습니다 필요한 세부 사항.
  2. 이 예외를 처리하거나 응답하는 것이 유용하다고 생각하지 않는 경우 설명하는 오류 유형에 대해 ApplicationException 또는 가능한 경우 InvalidOperationException을 고려하십시오.
+1

ApplicationException에서 상속 할 이유가 없으며 Exception 클래스 자체에서 상속합니다. 이것은 .NET 팀의 공식 추천이라고 생각합니다. –

+0

맞아 ... 나는 이것을 수정했다. – LBushkin

1

나는 InvalidOperationException을 제안합니다. 또 다른 옵션은 NotSupportedException입니다. 그 값이 잠재적으로 사용되는 범위 (예 : 향후)로 넘어갈 수 있습니다.

는 궁극적으로 내가 좋을 것 :

namespace YourProtocol 
{ 
    public class UnexpectedProtocolValueException : Exception 
    {