我今天写了我的第一个 C# 迭代器。呜呼。
有趣的是,它有副作用。我的迭代器从目录中过滤掉无效文件并返回一系列有效文件进行处理。当它遇到一个无效文件时,它会将其移动到另一个目录。
我尝试将其实现为 LINQ 查询,但真的不喜欢 where 子句的谓词具有副作用的事实。那是确定的气味。
我可以明确地实现它,循环遍历所有文件并依次处理好或坏,但这不是很优雅。更好的解决方案是将其拆分为两个列表(好的和坏的)并依次处理每个列表。
但后来我想起了迭代器。我现在有了一个迭代器,它产生有效文件并处理(移动)无效文件。
所以,我的问题是:迭代器有这样的副作用是个坏主意吗?我是否在迭代器中隐藏了太多功能?