避免null进入列表

时间:2014-01-23 07:23:18

标签: c# .net list lambda anonymous-methods

请参阅以下代码

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?

2 个答案:

答案 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;