문제

나는 최근에 동료에게 다음과 같이 진술했다.

nullReferenceExceptions가 있어야합니다 절대명시 적으로 잡히십시오

나는 결코 그 단어를 사용하지 않았다 .... 흠. 나는 그들을 잡기 위해 적절한 사용 사례를 본 적이 없지만 다른 사람이 있는지 확인하고 싶었습니까?

결국 그런 강한 단어는 절대 없습니다 .....

도움이 되었습니까?

해결책

이유에 따라 다릅니다. Eric Lippert 's를 참조하십시오 블로그 항목. "Boneheaded Extemptions"라면 아니요 - 호출 코드를 수정하십시오. 드문 경우가 "예외"(즉, 호출하는 코드에는 피하기 어려운 함정이 있습니다). 그렇다면해야 할 것 같아요.

다른 팁

글쎄, 당신이 Nullrefs를 유발하는 버기 타사 도서관에 전화 할 때, 올바르게 다루는 방법을 알고 있다면 그들을 잡는 것이 좋습니다.

실제 예 : 과거에는 제 3 자 편집자가 제공하는 데이터 그 리드를 매우 광범위하게 사용했습니다. 그들은 기본 데이터 소스에서 일부 데이터를 업데이트 할 때 때때로 Nullref (콜 스택에 깊숙이 둥지)를 던질 수있는 확인 된 버그를 가지고있었습니다.

이 코드의 상황을 처리했습니다.

            try
            {
                // do the update
            }
            catch (NullReferenceException)
            {
                try
                {
                    // redo the update
                }
                catch (NullReferenceException ex)
                {
                    // properly log the third party lib failure
                }
            }

BTW, 내 "로그"코드는 2 년 동안 실행되지 않았습니다. :) 이제 제 3 자 편집자 가이 문제를 해결했으며 아마도이 코드를 제거해야 할 것입니다.

어쩌면 올바른 인용문 일 것입니다

nullReferenceExceptions는 명시 적으로 잡히지 않아야합니다 예외를 던진 코드를 소유 한 경우

당신이 옳습니다. "절대"는 강한 단어입니다.

NullReferenceException (또는 Java의 NPE)을 잡으면 항상 코드의 목적에 따라 다릅니다.

예를 들어, 애플리케이션이 잠재적으로 불확실한 상태 (생명 지원 시스템 생각)에서도 처리를 계속 해야하는 경우 또는 코드가 참조 된 객체의 상태에 관심이없는 경우 (예 : 문자 그대로 잘못된 데이터를 버리는 배치 처리 데이터 ).

이러한 유형의 예외를 포착하지는 않지만 법은 아닙니다.

나는 결코 말하지 않을 것입니다. 예를 들어 예외를 기록하거나 한 스레드에서 다른 스레드로 마샬링하기 위해 잡을 수 있습니다. 두 경우 모두 예외를 다시 던져야합니다.

Marc Gravell이 지적한 바와 같이 Eric Lippert는 자신의 블로그에서 예외에 대해 매우 잘 입력했습니다.

한 번은 15 정도의 변수 값을 기준으로 큰 문자열을 만들어야했습니다. 각각의 귀무를 확인하는 대신, 나는 단순히 계속해서 문자열을 만들고 변수를 디포 링하고 NRE를 잡았습니다. 솔직히 말해서 그것은 기분이 나쁘고 장난 꾸러기 느낌이 들었지만 많은 코드를 작성하지 못하게되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top