Избегайте null, чтобы войти в список


Пожалуйста, смотрите код ниже

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;
}

Теперь проблема в том, что "предметы" содержат идентификатор, для которого человек не существует. Поэтому мой "ResolvePerson" возвращает null. Это приводит к исключению в строке№2. У меня есть только контроль над методом ResolvePerson. Есть ли способ пропустить personUri, для которого нет персоны, вместо того, чтобы возвращать null?

2 2

2 ответа:

Перед вызовом второй строки с помощью предложения where следует отфильтровать нулевые элементы. Но если вы не можете контролировать этот код, как вы сказали, Вы можете вернуть "фальшивку" Person, которая знает, что это подделка, и ничего не делает, когда вы звоните AdditionalInfo

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

Вы можете использовать Where from Linq для фильтрации нулевых лиц

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