前の質問では、IEnumerableと、null値のコレクションの代わりに空のコレクションを使用する規則について説明しました。多くの間違いを起こしやすいnullチェックを排除するので、これは良い習慣です。
しかし、答えはケースの1つに完全には対応していません。多くの場合、特に配列が外部メソッドから返される場合は、null値を処理する必要があります。例:
(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);
私はこれを気にしませんが、私はより良いアイデアを探しています。すでにあるはずの何かを追加しているようです。