C#

2016-11-23 2 views
2

에서 개체 이니셜 라이저를 사용할 때 예외를 throw하는 속성을 식별 할 수 없습니다 아래의 두 샘플 코드에서 C# 정상 메서드 및 개체 이니셜 라이저를 사용하여 테스트이라는 클래스를 인스턴스화하려고합니다.C#

DateTime? nullDate = null; //this value will come from somewhere else 
DateTime? notNullDate = DateTime.Now; 
var test = new Test(); 
test.Date = nullDate.Value; //exception will throw here 
test.Name = "String"; 
test.AnotherDate = notNullDate.Value; 

위의 샘플 코드에서 디버깅하는 동안 어떤 속성이 예외를 표시하는지 분명하게 알 수 있습니다.

위의 코드에서 개체 이니셜 라이저를 사용할 때 예외가 throw되는 예외를 이해할 수 없습니다. 여기서 나는 한 줄씩 디버깅 할 수 없었다. 속성을 많이 초기화하면 식별하기가 매우 어렵습니다.

여기 내 질문 : 어떤 속성이 예외 창에서 예외를 표시하고 있는지 식별 할 수 있습니까? 현재, 내부 예외는 null입니다.

enter image description here

+2

초기화 할 수 없기 때문에 null 체크 등을해야합니다. 예외는 _what_에 대한 어떤 문맥도 제공하지 않습니다. –

+0

@DStanley null 참조를 확인할 수는 있지만 제 질문은 예외를 발생시키는 속성을 식별하는 다른 방법이 아닙니까? – JEMI

+0

아니요 - 예외는 _what_가 null에 대한 컨텍스트를 제공하지 않습니다. –

답변

0

개체 이니셜 라이저는 간단한 초기화를 위해 사용되어야한다. 예외를 throw하는 코드가있는 경우 문제에 대한 설명이 표시됩니다.

저는 이것이 실제로 답이 아니라는 것을 알고 있습니다. 그러나 어떤 속성이 실패하는지 알 수 없습니다. nullable의 경우 기본값을 지정하는 곳에서 이와 같이 사용할 수 있습니다.

var test = new Test 
     { 
      Date = nullDate.GetValueOrDefault(new DateTime()), 
      Name = "String", 
      AnotherDate = notNullDate.Value 
     }; 
+0

내 질문에 대한 모든 것, 속성을 식별하는 디버깅 기법이 있습니까? 그렇다면 Object Initializers를 사용하면 어떤 이점이 있습니까? – JEMI

+2

당신은 이점에 대한 답변을 참조 할 수 있습니다 : http://stackoverflow.com/questions/12842371/is-there-any-benefit-of-using-an-object-initializer – Roland

+0

왜 Visual Studio가 제공 할 수 없는지 궁금합니다. 예외를 슬로우하는 프로퍼티 – JEMI