2017-11-22 30 views
0
내가 프로젝트를 진행하고

에서 인스턴스화C# 데이터 반원 선언

[DataMember] 
public List<SpecialOpeningHours> SpecialOpeningHours { get; set; } 

누구든지이 방법으로 인스턴스화 된 이유와 장점이 있는지 설명 할 수 있습니까? 사용상 차이는없는 것 같습니다. 나는 Dapper를 사용하고 있으며 같은 결과로 목록을 채울 수 있습니다.

+2

차이점은 두 번째 버전에서는'SpecialOpeningHours'가'null'입니다. –

+1

"사용상 차이가없는 것 같습니다." 후자의 경우 null이 아닌 값으로 시작하는 반면, 두 번째 경우에는 null 값으로 시작합니다. 어떻게 다른가요? –

+0

https://msdn.microsoft.com/magazine/dn802602.aspx를 보시오 – HimBromBeere

답변

1

첫 번째 예는 단지 바로 가기이를 위해 C# 6에 도입 :

public MyClass() 
{ 
    this.SpecialOpeningHours = new List<SpecialOpeningHours>(); 
} 

지금과 비교해 :

public MyClass() 
{ 
    this.SpecialOpeningHours = null; 
} 

전자는 첫 번째 옵션은 컴파일 할 때로 번역되는 것입니다 두 번째 것은 초기 값을 추가하지 않을 때 얻을 수있는 것입니다. 특히 두 번째 예제에서는 멤버 중 하나를 호출하자 마자 NullReferenceException이 발생하므로 첫 번째 멤버가 정상적으로 실행됩니다.

+0

감사합니다. 기본적으로 빈 목록을 갖는 것이 유용 할 수 있지만 데이터베이스가 데이터를 반환하지 않았다는 것을 의미합니다. 나는 is가 채워질 때까지 null을 갖는 것을 선호한다고 생각합니다. –

+0

비어있는 목록을 기본값으로 사용하는 것은 목록에만 적용됩니다. 대신 IEnuemrable 이 있거나 다른 인터페이스가 있으면 어떻게 될까요? 컴파일러는 속성이 기본값이어야하는 것을 어떻게 알아야합니까? 물론이 값을 어떤 식 으로든 설정해야합니다. 또한 빈 목록은 몇 가지 다른 것을 나타낼 수 있습니다. DB에서는 데이터가 없지만 * 가질 수는 없습니다. 또한 목록이 아직 채워지지 않았으며 값이 곧 올 것입니다. – HimBromBeere

+0

그냥 이전 Entity Framework 프로젝트를 살펴 보았습니다. EF에 의해 모델이 생성되는 곳에서는 멤버가 새로운 빈 목록으로 인스턴스화되지 않습니다. 나는 그것들을 인스턴스화하는 것의 이점을 볼 수 있고 그것을 사용하는 것을 고려할 것이다. –