이 답변 에서 설명한 것처럼 성능 적중은 무시할 수 있습니다.
성능이 문제가되지 않는다는 아이디어를 생각해 봅시다. 당신은 던지는 것 System.Exception
, 단지로 실행을 이동하는 catch
절 . 하지만 던지기 BadControlFlowThatShouldBeRewrittenException
는 아마 과잉 일 것입니다.
이것을 분해하자. 우리는 :
- 메소드
GetDataFromServer
(메소드 이름은 C #에서 PascalCase 여야 함)는 예외를 발생 시키거나을 리턴 할 수 bool
있습니다.
- 결과가
true
이면 실행하십시오 ProcessData
.
- 돌아
null
그렇지.
이 코드가 작성되는 방법과 비슷하고 단순히 너무 많은 일을하고 있습니다. GetDataFromServer
돌아 오는 bool
설계 결함과 같은 모습을, 내가하는 그 방법을 기다리고있을 거라고 는 IT가 서버에서 점점 데이터 반환 , 일부 IEnumerable<SomeType>
즉, 행복 경로를 반환 - 0 개 이상의 항목이 포함됩니다 N 항목 N> 0 그다지 행복하지를, path는 0 개의 항목을 반환하고 불행한 경로는 처리되지 않은 예외로 인해 발생합니다.
메소드 외모 좋아하는 것을 그 변경, 꽤 많은 - 다시는이 의미가 있는지 여부를 원래의 게시물 만 (로 컴파일하지 않을 따라서 하나 개의 출구 지점을 가지고 있기 때문에, 이야기하기 어렵다 모든 코드 경로가 값을 반환 그래서) 이것은 단지 거친 추측 일뿐입니다.
try
{
var result = GetDataFromServer();
return ProcessData(result);
}
catch
{
return null;
}
여기 ProcessData
에서을 반복하고 있음 result
을 확인하고에 null
항목이 없으면 반환 합니다 IEnumerable
.
이제 왜 메서드가 반환 null
됩니까? 서버가 다운 되었습니까? 쿼리에 버그가 있습니까? 연결 문자열이 잘못된 자격 증명을 사용하고 있습니까? GetDataFromServer
예상치 못한 예외로 폭발 할 때마다 그것을 삼키면 서 카펫 아래로 밀어 넣고 null
값을 반환 합니다. 이 경우 특정 예외를 포착하고 다른 모든 것을 기록하는 것이 좋습니다. 그렇게하면 디버깅이 훨씬 쉬워집니다.
catch
예외를 포착하지 않는 일반적인 조항을 사용하면 아무것도 진단하기가 어렵습니다. 나는 이것을 최소한 대신 할 것입니다 :
catch(Exception e)
{
return null;
}
이제 e
문제가 발생했는지 최소한 깨고 검사 할 수 있습니다 .
TL; DR : 아니요, 흐름 제어에 대한 예외를 던지고 잡는 것은 좋은 생각이 아닙니다.