, 우리는 종종 예외가 발생할 : NullReferenceException
을 잘 알려진 오류 메시지 :왜 '객체 참조가 객체의 인스턴스로 설정되지 않았습니다'가 더 명확하지 않습니까? 개발자
개체 참조가 객체
의 인스턴스로 설정되지는 아니 할 수 있습니다. NET Framework에서 조금 더 의미있는 것을 돌려 주는가?
뭔가가 같은 : Y라는 이름의 유형 X의
개체가 아니라 개체의 예를
, 우리는 종종 예외가 발생할 : NullReferenceException
을 잘 알려진 오류 메시지 :왜 '객체 참조가 객체의 인스턴스로 설정되지 않았습니다'가 더 명확하지 않습니까? 개발자
개체 참조가 객체
의 인스턴스로 설정되지는 아니 할 수 있습니다. NET Framework에서 조금 더 의미있는 것을 돌려 주는가?
뭔가가 같은 : Y라는 이름의 유형 X의
개체가 아니라 개체의 예를
개체에는 이름이 없으므로 이름을 어떻게 나타낼 수 있습니까? 널 참조 는는 변수에서로드 된 수 - 나는 등
JIT를 스택 정보에서 아마 모습 선언 된 참조 형이 무엇 해결하기 위해 할 수있는 방법으로 재산을 반환되었을 수 있습니다 그러나 이것이 얼마나 자주 도움이 될지 확신하지 못합니다.
나는 이것이 디버깅과 관련하여 엄청난 부담이된다는 것을 알 수 없다. 한 줄에 null이 될 수있는 많은 것들이 있다면, 보통 그걸 나누는 것이 좋습니다. 더.
로 설정 때문에 그 말의 그것의 가장 일반적인 방법.
내게 이것은 순전히 선호의 문제처럼 보입니다. 그만큼 버그가 있다면 항상 NullReferenceException
의 서브 클래스를 만들고 메시지를 변경할 수 있습니다. :)
메시지가 생성 될 때 사용할 수있는 정보의 양은 얼마가되는지에 달려 있습니다. 수동으로 몇 가지 추가 정보를 전달하지 않고 단순히 NullReferenceException
내부에서 null 인 필드의 이름을 결정하는 것은 약간의 부담이 큰 작업 인 리플렉션 (상당히 많은 비트)을 필요로합니다. 예를 들어 ArgumentNullException
을 가져 와서 메시지가 문제의 매개 변수 이름을 나타내는 메시지를 던지려면 전화 할 때 문자열을 전달해야합니다 (throw new ArgumentNullException("param1")
).
예외 메시지의 세부 수준은 완전히 정의 된 프로그래머에게 달려 있지만 예외를 throw 할 때는 시스템 집약적 인 작업을하지 않는 것이 좋습니다.
프레임 워크가 NullReferenceException을 throw합니다. – ChaosPandion
그래도 할 수 있지만 항상 try {} catch (NullReferenceException e) {throw new CoolerNullReferenceException (e)}'또는 그런 일이 있습니다. –
아, 그 대답에 웃는 얼굴이 나타났습니다. :) – ChaosPandion
매우 자세한 스택 추적 덕분에 더 자세히 설명 할 필요가 없다고 생각합니다. 게다가 처음부터 이것을 피하기 위해 주장을 사용해야합니다. – ChaosPandion
어떤 종류의 디버깅이라도 속도가 느려집니다. 그렇긴하지만 물건을 속력을 내서 느리게 할 것인지 아닌지를 생각해 보면, 물건을 속력을 내고 모든 물건을 분리 된 선으로 나눌 필요가 없으며 즉각적인 창으로 미쳐 버리는 것보다 어떤 객체가 null인가? –
이 문제가 모두 부담스럽지 않다고 합의했습니다. null 참조 예외가 발생하기 전에 한두 줄은 정확히 초기화되지 않은 것을 알려줍니다. –