В предыдущем вопросе обсуждается IEnumerable и соглашение об использовании пустых коллекций вместо нулевых. Это хорошая практика, так как она избавляет от множества ошибок, допускающих ошибки.
Но ответы не совсем касаются одного из случаев. Много раз я заставлял иметь дело с нулевыми значениями, особенно когда массивы возвращаются из сторонних методов. Пример:
(foreignObj.GetPeople() ?? Enumerable.Empty<Person>())
.Where(p => p.Name != "John")
.OrderBy(p => p.Name)
.Take(4);
Я написал вспомогательный метод, который несколько улучшает читабельность.
public class SafeEnumerable
{
public static IEnumerable<T> From<T>(T[] arr)
{
return arr ?? Enumerable.Empty<T>();
}
}
В результате:
SafeEnumerable.From(foreignObj.GetPeople())
.Where(p => p.Name != "John")
.OrderBy(p => p.Name)
.Take(4);
Я не против этого, но я ищу лучшие идеи. Кажется, я добавляю что-то, что должно быть уже там.