我发现自己一遍又一遍地写下以下内容:
if (myEnumerable != null) {
foreach (var element in myEnumerable) {
DoSomething(element);
}
}
Run Code Online (Sandbox Code Playgroud)
每次想要枚举时检查NULL都很繁琐,有更好的方法吗?例如,有没有办法覆盖枚举器以返回"Enumerable.Empty"而不是NULL?
您可以使用null-coalescing运算符:
foreach (var element in myEnumerable ?? Enumerable.Empty<Foo>()) {
DoSomething(element);
}
Run Code Online (Sandbox Code Playgroud)
但更好的方法是确保无论你IEnumerable<T>从哪里获取这个从不返回null,这是在.NET中使用枚举的传统方法.
好吧,理想情况下设计你的代码,使其不能为空.或者,创建一个扩展方法:
public static class EnumerableEx
{
public static IEnumerable<T> EmptyIfNull(this IEnumerable<T> source)
{
return source ?? Enumerable.Empty<T>();
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
foreach (var element in myEnumerable.EmptyIfNull())
DoSomething(element);
}
Run Code Online (Sandbox Code Playgroud)
这与Darin的方法非常相似,但将空合并运算符移动到扩展方法中.
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |