我有这段代码:
public IEnumerable<int> Iterator {
get { if (false) yield return -1; }
}
这是相当丑陋的,但当你试图将其重构为:
public IEnumerable<int> Iterator {
get { return null; }
}
以下代码中断:
foreach (var item in obj.Iterator) {
}
你会如何清理它?
答案 0 :(得分:10)
public IEnumerable<int> Iterator {
get { yield break; }
}
答案 1 :(得分:6)
顺便说一句,.NET框架已经有了一种方法来完成这项工作(使Jared的代码变得多余):System.Enumerable.Empty<T>
。
答案 2 :(得分:2)
更好的解决方案是为此问题定义可重用的方法。我在共享库中保留了一个方法来处理这种情况。
public static class CollectionUtility {
public static IEnumerable<T> CreateEmptyEnumerable<T>() {
yield break;
}
}
现在在你的方法中你可以打电话
public static IEnumerable<int> Iterator {
get { return CollectionUtility.CreateEmptyEnumerable<int>(); }
}
答案 3 :(得分:0)
public IEnumerable<int> Iterator {
get { yield break; }
}