2014-09-22 10 views
-3

오류 처리를위한 표준 방법이없는 큰 솔루션이 있습니다. 최근에는 try/finally 블록이있는 많은 메소드를 발견했습니다. catch 블록이 없습니다. 어떻게 이런 식으로 모든 것을 발견 했습니까?catch 블록이없는 try 블록을 찾는 방법은 무엇입니까?

+5

왜이 모든 항목을 찾을 하시겠습니까? – krisdyson

+2

"finally"에 대한 검색이 충분하지 않은 이유는 무엇입니까? –

+1

'finally '를 검색하여 그 전에'catch' 블록이 있는지 살펴보십시오. –

답변

2

try은 반드시 블록에서 오류가 발생할 수 있음을 의미하지 않습니다. 게으른 프로그래머에게는 때로는 문법적 설탕입니다.

:

return에 값을 기원하고, 그 다음에 그 값을 수정 말한다. 당신은이를 작성할 수 있습니다

public int Foo() { 
    int old = this.value; 
    this.value = 5; 
    return old; 
} 

그러나 더 편리한 방법은 다음과 같습니다

public int Foo() { 
    try { 
     return this.value; 
    } finally { 
     this.value = 5; 
    } 
} 

당신은 두 번째 구현은 더 이상이지만, 일반적으로이 사실이 아니라는 주장 할 수 있습니다. 게다가 그것은 old 값을 명시 적으로 저장하지 못하게합니다. 두 번째 구현은 프로그래머가 의도 한 바가 더 읽기 쉽고 오류가 발생하기 쉽습니다.

이렇게하면 try 키워드가 처음에 의도 한 것보다 더 모호하게된다고 주장 할 수 있습니다. 더 나은 키워드는


은 내가 아는 한, 아니 catch 블록 try 블록을 확인하는 쉬운 방법이 없습니다 ... 아마 더 적합했다. 당신은 Regex@"try\d*{[^}]*}\d*finally\d{[^}]*}를 사용하여 인스턴스의 인스턴스의 가장을 (찾을 희망하지만, try 또는 finally 블록의 추가 범위가 말할 수있는, 다음 Regex이 감지되지 않습니다. 가장 쉬운 아마 문맥 자유를 복사하는 의 문법 C#/Vb.Net 후이 catch 블록을 포함하지 않는 try/ catch/ finally 블록의 건설에 경우에 적절한 검사 및 인쇄 않습니다.

+0

감사합니다. @CommuSoft –