IEnumerator.Reset メソッド
アセンブリ: mscorlib (mscorlib.dll 内)
構文
例外
解説
コレクションが変更されない限り、列挙子は有効なままです。要素の追加、変更、削除などの変更がコレクションに対して実行されると、列挙子は回復不可能な無効状態になり、次に MoveNext メソッドまたは Reset メソッドを呼び出すと InvalidOperationException がスローされます。
実装時の注意 Reset を呼び出した場合、結果として列挙子が必ず同じ状態になることが必要です。列挙子をコレクションの先頭、つまり最初の要素の前に移動する実装がよく使用されます。この場合、列挙子が作成された後でコレクションが変更されていると、その列挙子は無効になります。これは、MoveNext および Current を使用する場合でも同様です。カスタム コレクションでの IEnumerator インターフェイスの実装を次のコード例に示します。この例では、Reset が明示的に呼び出されていませんが、foreach (Visual Basic では for each) の使用をサポートするために実装されています。このコード例は、IEnumerator インターフェイスのトピックで取り上げているコード例の一部です。
Public Class PeopleEnum Implements IEnumerator Public _people() As Person ' Enumerators are positioned before the first element ' until the first MoveNext() call. Dim position As Integer = -1 Public Sub New(ByVal list() As Person) _people = list End Sub Public Function MoveNext() As Boolean Implements IEnumerator.MoveNext position = position + 1 Return (position < _people.Length) End Function Public Sub Reset() Implements IEnumerator.Reset position = -1 End Sub Public ReadOnly Property Current() As Object Implements IEnumerator.Current Get Try Return _people(position) Catch ex As IndexOutOfRangeException Throw New InvalidOperationException() End Try End Get End Property End Class
public class PeopleEnum : IEnumerator { public Person[] _people; // Enumerators are positioned before the first element // until the first MoveNext() call. int position = -1; public PeopleEnum(Person[] list) { _people = list; } public bool MoveNext() { position++; return (position < _people.Length); } public void Reset() { position = -1; } public object Current { get { try { return _people[position]; } catch (IndexOutOfRangeException) { throw new InvalidOperationException(); } } } }
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
参照
- IEnumerator.Reset メソッドのページへのリンク