请参阅以下代码
1. persons = Items.Select(item => componentResolver.ResolvePerson(new TridionUri(item.Id))).ToList();
2. persons.Each(person => person.AdditionalInfo); // gives null reference exception
ResolvePerson看起来像:
public Person ResolvePerson(TridionUri personUri)
{
Person person = publicationResolverService.GetPerson(personUri);
if (author != null)
{
person.Id = personUri.ItemId.ToString();
}
return person;
}
现在的问题是,'Items'包含一个人不在的人的ID。所以我的'ResolvePerson'返回null。这导致第2行中的例外。我只能控制ResolvePerson方法。有没有办法可以跳过没有人在场的personUri而不是返回null?
答案 0 :(得分:5)
您可以使用Where
中的Linq
来过滤空人
persons.Where(person => person != null).Each(person => person.AdditionalInfo);
答案 1 :(得分:1)
您应该在使用where子句调用第二行之前过滤掉null项。但是如果你不能像你说的那样控制那些代码就可以返回一个“假的”Person
,它知道它是假的并且在你拨打AdditionalInfo
Person person = publicationResolverService.GetPerson(personUri);
if (author != null)
{
person.Id = personUri.ItemId.ToString();
}
else
{
person = _fakePerson;
}
return person;