假设 file.Headers 中元素的类型是 T 你可以这样做
foreach(var header in file.Headers ?? Enumerable.Empty<T>()){
//do stuff
}
如果 file.Headers 为空,这将创建一个空的 T 枚举。但是,如果文件类型是您拥有的类型,我会考虑更改 getter Headers
。null
是 unknown 的值,所以如果可能,当 null 实际上(/最初)应该解释为“我不知道是否有任何元素”时,而不是使用 null 作为“我知道没有元素”,而是使用空集来显示你知道集合中没有元素。这也将是 DRY'er,因为您不必经常进行 null 检查。
编辑作为 Jons 建议的后续行动,您还可以创建一个扩展方法,将上述代码更改为
foreach(var header in file.Headers.OrEmptyIfNull()){
//do stuff
}
在您无法更改 getter 的情况下,这将是我自己的首选,因为它通过为操作命名(OrEmptyIfNull)更清楚地表达了意图
上面提到的扩展方法可能会使优化器无法检测到某些优化。具体来说,那些与 IList 相关的使用方法重载 this 可以被消除
public static IList<T> OrEmptyIfNull<T>(this IList<T> source)
{
return source ?? Array.Empty<T>();
}