假设file.Headers中元素的类型为T,则可以执行此操作
foreach(var header in file.Headers ?? Enumerable.Empty<T>()){
//do stuff
}
如果file.Headers为null,则将创建T的空可枚举。但是,如果文件的类型是您拥有的类型,请考虑改为更改getter Headers
。null
是unknown的值,因此如果可能(而不是)将null实际(/最初)解释为“我不知道是否有任何元素”,请尽可能使用空集代替您知道集合中没有元素。那也将是DRY'er,因为您不必经常进行空检查。
作为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>();
}