什么时候使用迭代器模式是合适的,什么时候是不可取的?
模式隐藏了哪些陷阱?
例如,我有一个从文件中读取行的类:
public class FormattedFileReader{
private readonly string _path;
// ...
public static IEnumerable<string> ReadFromFile(){
foreach (var line in File.ReadLines(_path)){
yield return GetFormattedValue(line);
}
}
private string GetFormattedValue(string initial){
// ...
}
}
他们在 MSDN 上写的关于迭代器的内容
我将告诉你我对使用迭代器的看法。
每当我使用:
foreachIEnumerator<T> GetEnumerator()yield return,同时我们最好不要保持连接打开,例如与数据库长时间保持连接,因为我们绝对不能确定在调用循环内部foreach我们会绕过在合理的时间内关闭整个集合并关闭连接,否则有人会绕过它,而不知道我们快速遍历集合的计划。我认为使用迭代器非常合适的示例:
遍历集合的一部分
迭代器扩展方法
从文件中读取,如果对我们来说快速关闭这个文件并不重要