上一个问题讨论了 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);
我不介意这一点,但我正在寻找更好的想法。好像我正在添加一些应该已经存在的东西。