file.Headersの要素のタイプがTであると仮定すると、これを行うことができます
foreach(var header in file.Headers ?? Enumerable.Empty<T>()){
//do stuff
}
file.Headersがnullの場合、これはTの空の列挙型を作成します。ファイルのタイプが自分が所有するタイプの場合は、Headers
代わりにゲッターを変更することを検討します。null
nullの値なので、可能であれば、nullを「要素がないことを知っている」として使用する代わりに、nullを(元々)「要素があるかどうかわからない」と解釈する必要がある場合は、空のセットを使用して表示します。セットに要素がないことを知っていること。nullチェックを頻繁に行う必要がないため、これもより乾燥します。
Jons提案のフォローアップとして編集し、上記のコードを次のように変更する拡張メソッドを作成することもできます
foreach(var header in file.Headers.OrEmptyIfNull()){
//do stuff
}
ゲッターを変更できない場合は、操作に名前(OrEmptyIfNull)を指定することで意図をより明確に表現するので、これが私の好みです。
上記の拡張方法では、オプティマイザが特定の最適化を検出できない場合があります。具体的には、これをオーバーロードするメソッドを使用してIListに関連するものを排除できます。
public static IList<T> OrEmptyIfNull<T>(this IList<T> source)
{
return source ?? Array.Empty<T>();
}