클래스 속성에서 코드 적용 범위를 확인할 때 발견 된 시나리오가 있습니다. 속성이 List < T>이고 초기화 프로그램이 사용되면 set 메서드가 호출 된 것으로 나타나지 않습니다. 이것은 문자열이나 int와 같은 다른 유형에는 해당되지 않습니다. 코드 커버리지는 set call을 보여주지 않으며, set의 breakpoint에도 영향을주지 않습니다.속성 초기화가 목록 집합을 호출하지 않습니다. <T>
예 클래스 :
public class ContainerClass
{
public string Text { get; set; }
public List<Item> Items { get; set; }
}
다음과 같은 텍스트에 set 메소드가 호출되고, 이니셜 라이저를 사용하여, 코드 커버리지 레지스터하지만 항목의 설정 방법은하지 않습니다, 나는 왜 궁금 :
var arrange = new ContainerClass
{
Text = "value",
Items = { new Item() }
};
편집 : 목록이 올바르게 지정되어 있고 테스트 할 수 있지만 실제 설정 방법을 따르는 것으로 보입니다.
나는 새 목록을 지정할 때 흥미롭게도, 그것은 전화를받을 않습니다 당신이 경우,
var arrange = new ContainerClass
{
Text = "SomeValue"
};
arrange.Items.Add(new Item(){Prop=Value});
또는 그런 다음
public class ContainerClass
{
public string Text { get; set; }
public List<Item> Items { get; set; }
public ContainerClass()
{
Items = new List<Item>();
}
}
:
var arrange = new ContainerClass
{
Items = new List<Item> { new Item() }
};
정확한 초기화 방법은 마지막 예입니다. 다른 버전의 의미가 무엇인지 모르겠습니다. –
목록이 나에게 할당되지 않아 NullReferenceException이 발생합니다. – BoltClock
§7.6.10.2 "등호 뒤에 콜렉션 이니셜 라이저를 지정하는 멤버 이니셜 라이저는 필드 또는 속성에 새 콜렉션을 할당하는 대신 참조되는 콜렉션에 이니셜 라이저에 제공된 요소를 추가합니다 필드 또는 속성에 의해. " 코드가 제대로 작동하려면 목록이 초기화되어 있어야합니다. 예를 들어 제대로 실행되지 않습니다. – BoltClock