私は基本的に、クラスを使用して反復できるようにしようとしていforeach
ます。このチュートリアルを読みました。MSDN . それは非常に簡単に思えます。しかし、2回目の繰り返しをしたいときに問題があります。私はそれをデバッグしました。Reset()
関数を呼び出していないことがわかりました。
クラスA
class A : IEnumerable, IEnumerator
{
int[] data = { 0, 1, 2, 3, 4 };
int position = -1;
public object Current
{
get
{
return data[position];
}
}
public bool MoveNext()
{
position++;
return (position < data.Length);
}
public void Reset()
{
position = -1;
}
public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
}
}
次のメイン関数を実行すると; 関数を呼び出すことはありませんReset()
。したがって、1回ループした後、クラスを再度反復することはできません。
主要
static void Main(string[] args)
{
A a = new A();
foreach (var item in a)
{
Console.WriteLine(item);
}
Console.WriteLine("--- First foreach finished. ---");
foreach (var item in a)
{
Console.WriteLine(item);
}
}
出力:
0
1
2
3
4
--- First foreach finished. ---
Press any key to continue . . .
何かご意見は?