2014-01-23 5 views
2

1. persons = Items.Select(item => componentResolver.ResolvePerson(new TridionUri(item.Id))).ToList(); 
2. persons.Each(person => person.AdditionalInfo); // gives null reference exception 

ResolvePerson 아래의 코드를 참조하십시오처럼 보이는 . 그래서 내 'ResolvePerson'은 null을 반환합니다. 이로 인해 2 행에서 예외가 발생합니다. ResolvePerson 메서드 만 제어 할 수 있습니다. 그 사람을 건너 뛸 수있는 방법이 있나요? null을 돌려주는 대신에 사람이없는 사람이 있습니까? where 절

+1

는'Each'는'IEnumerable' 확장 또는'에서의 오타입니다 호출 할 때 아무것도 안하는 "가짜"Person를 반환 할 수 있습니다 말했듯 ForEach'? –

+0

IEnumerable 확장명입니다. –

+1

그런 다음 @wudzik의 솔루션을 사용하십시오. –

답변

1

당신은 널 (null) 항목을 필터링한다을 필터링 할 수 Linq에서 Where를 사용할 수 있습니다. 당신이 그 코드를 제어 할 수 있다면 당신은 당신이 가짜 알고 당신이 AdditionalInfo

Person person = publicationResolverService.GetPerson(personUri); 
if (author != null) 
{ 
    person.Id = personUri.ItemId.ToString(); 
} 
else 
{ 
    person = _fakePerson; 
} 
return person; 
+0

이 _fakePerson은 무엇입니까 ?? Person 클래스를 생성해야하는 객체입니까? –

+0

@RossCooper 이것은 기본적으로 해킹이므로 AdditionalInfo의 기능에 따라 다릅니다. null을 걸러 낼 수는 없지만 AdditionalInfo가 호출 될 때 아무 것도하지 않는'Person'의 인스턴스를 생성 할 수 있습니다. 그것은 당연히'Person' 구현을 변경해야합니다. – i3arnon

+0

@RossCooper 우리가'person' 클래스와'Each' 확장 메소드를 보여 주면 더 쉬워 질 것입니다. – i3arnon

5

다음을 사용하여 두 번째 줄을 호출하기 전에 널 (null) 인

persons.Where(person => person != null).Each(person => person.AdditionalInfo); 
+0

이 파일을 제어 할 권한이 없습니다. ResolvePerson 메서드 만 내가 편집 할 수 있습니다. –