今日、最初の C# イテレータを書きました。うふふ。
興味深いことに、それには副作用があります。私のイテレータはディレクトリから無効なファイルを除外し、処理する有効なファイルのシーケンスを返します。invlaid ファイルを検出すると、それを別のディレクトリに移動します。
LINQ クエリとして実装しようとしましたが、where 句の述語に副作用があるという事実が本当に気に入りません。確かな匂いです。
明示的に実装して、すべてのファイルをループし、良いものと悪いものを順番に処理することもできますが、あまりエレガントではありません。より良い解決策は、それを 2 つのリスト (良いリストと悪いリスト) に分割し、それぞれを順番に処理することです。
しかし、イテレータを思い出しました。これで、有効なファイルを生成し、無効なファイルを処理 (移動) する反復子ができました。
だから、私の質問はこれです: イテレータがこのような副作用を持つのは悪い考えですか? イテレータに隠しすぎていませんか?