2011-03-30 2 views
26

Visual Studio에서 개체 이니셜 라이저 코드를 단계별로 디버깅 할 수 있습니까?개체 이니셜 라이저 코드를 디버깅하는 방법은 무엇입니까?

예 : VS가 단계별로 할 수없는 것 같다

return new Veranstaltung() 
      { 
       ID = tblVeranstaltung.VeranstaltungsID, 
       Titel = tblVeranstaltung.Titel, 
       KursNummer = tblVeranstaltung.Kursnummer, 
       ErsterTermin = tblVeranstaltung.ersterTermin, 
       Dauer = tblVeranstaltung.schulungsTage, 
       StartZeit = tblVeranstaltung.BeginnZeit, 
       EndZeit = tblVeranstaltung.Endzeit, 
       KostenNettoValue = tblVeranstaltung.PreisNetto ?? default(decimal), 
       IsLastMinute = tblVeranstaltung.lastMinute == 1, 
       IsVerkuerzt = tblVeranstaltung.istVerkuerzt == 1, 
       IsGeschlossen = tblVeranstaltung.istGeschlosseneVeranstaltung == 1, 
       IsIntern = tblVeranstaltung.istInterneVeranstaltung == 1, 
       StandortID = Convert.ToInt32(tblVeranstaltung.StandortID), 
       LastMinuteRabatt = tblVeranstaltung.lastMinuteRabatt ?? default(decimal) 
      }; 

가 가끔 (INT로 변환이 실패 할 때, 예를 들어) 코드 이런 종류의 오류를 얻을, 그것은 단지에 대한 오류가 발생합니다 전체 라인과 초기화 중 실패한 부분을 시도해야합니다.

이 간단한 방법으로 디버깅 할 수 있습니까? 아니면 크거나 복잡한 초기화에 대해 개체 이니셜 라이저를 사용하지 않는 것이 더 좋습니까?

VS 2010 및 C# 4.0을 사용하고 있습니다.

답변

10

간단한 개체 초기화를 위해 개체 이니셜 라이저를 유지해야합니다. 객체 생성자가 실패 할 수있는 코드 (예 : 예외 발생)가있는 지점에 있다면 사용하지 마십시오. 객체 구조 패턴을 사용하면 사용자의 필요에 따라 팩토리 메소드, 추상 팩토리 등을 사용할 수 있습니다. 이렇게하면 클래스의 모든 사용자가 유효하지 않은 상태의 인스턴스를 작성할 수 없습니다 (예 : 멤버 초기화를 잊어 버리거나 잘못된 값 등으로 관련 멤버를 초기화하는 등 ...)

7

크거나 복잡한 초기화의 경우 개체 이니셜 라이저를 사용하지 않는 것이 좋습니다.

예, 유지 관리 (및 디버그)가 어려워집니다.

4

Visual Studio 2010에서 객체 초기화 프로그램에 대한 디버깅 지원이 좋지 않습니다. 사용하지 않는 것이 좋습니다. 그 이유에 대한 크고 복잡한 초기화를위한 객체 이니셜 라이저 (object initializers). 그러나 크거나 복잡한 (예 : 중첩 된) 객체 초기화는 나쁜 디자인 선택을 고려하지 않습니다.

예를 들어 문서/레코드를 나타내는 개체를 매핑 할 때 코드에서 "노이즈"를 최소화하고 매우 명확한 선언적 스타일을 제공하고 독자가 더 명확하게 관계를 볼 수 있도록합니다. 소스와 대상. 또한이 접근법은 데이터 유효성 검사와 데이터 매핑을 분리하는 것이 바람직하다고 생각합니다.

Null 안전 참조 연산자는이 스타일로 코딩 할 때 많은 도움이되지만 다른 주제입니다. 다행히도 Visual Studio의 향후 릴리스는 이러한 유용한 구성의 디버깅을 향상시킬 수 있습니다.

관련 문제