自分でLINQのようなもの作ってみるとわかるんだけれども
JavaのIteratorクラスも.NETのEnumeratorクラスもデザイン的にはよろしくない

JavaのIteratorは
hasNext : 値があるかを返す
next : カーソルを進め、値を返す

.NETのEnumeratorは
MoveNext : カーソルを進め、値があるかを返す
Current : 値を返す

nextやMoveNextは一つのメソッドで2つの処理をやってるんだよね

hasValue
getValue
move
の3つに別れてるといろんな処理が書きやすい

Iteratorは一度自分で作ってみるのをおすすめする
結果的に使わなくてもやってみると楽しい