DataTableReader.GetEnumerator メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
項目のコレクションを反復処理するために使用できる列挙子を返します。
public:
override System::Collections::IEnumerator ^ GetEnumerator();
public override System.Collections.IEnumerator GetEnumerator ();
override this.GetEnumerator : unit -> System.Collections.IEnumerator
Public Overrides Function GetEnumerator () As IEnumerator
戻り値
項目のコレクションを表す IEnumerator オブジェクト。
例外
閉じている DataTableReader の列を読み取るかアクセスしようとしました。
例
GetEnumerator メソッドの使用例を次に示します。 これには、列挙子がアクティブな間に基になる DataTable から行が削除されたときの列挙子の動作が含まれます。
public static void Main()
{
try
{
DataTable userTable = new DataTable("peopleTable");
userTable.Columns.Add("Id", typeof(int));
userTable.Columns.Add("Name", typeof(string));
// Note that even if you create the DataTableReader
// before adding the rows, the enumerator can still
// visit all the rows.
DataTableReader reader = userTable.CreateDataReader();
userTable.Rows.Add(new object[] { 1, "Peter" });
userTable.Rows.Add(new object[] { 2, "Mary" });
userTable.Rows.Add(new object[] { 3, "Andy" });
userTable.Rows.Add(new object[] { 4, "Russ" });
IEnumerator enumerator = reader.GetEnumerator();
// Keep track of whether the row to be deleted
// has actually been deleted yet. This allows
// this sample to demonstrate that the enumerator
// is able to survive row deletion.
bool isRowDeleted = false;
while (enumerator.MoveNext())
{
DbDataRecord dataRecord = (DbDataRecord)enumerator.Current;
// While the enumerator is active, delete a row.
// This doesn't affect the behavior of the enumerator.
if (!isRowDeleted)
{
isRowDeleted = true;
userTable.Rows[2].Delete();
}
Console.WriteLine(dataRecord.GetString(1));
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Console.ReadLine();
}
Sub Main()
Try
Dim userTable As New DataTable("peopleTable")
userTable.Columns.Add("Id", GetType(Integer))
userTable.Columns.Add("Name", GetType(String))
' Note that even if you create the DataTableReader
' before adding the rows, the enumerator can still
' visit all the rows.
Dim reader As DataTableReader = userTable.CreateDataReader()
userTable.Rows.Add(1, "Peter")
userTable.Rows.Add(2, "Mary")
userTable.Rows.Add(3, "Andy")
userTable.Rows.Add(4, "Russ")
Dim enumerator As IEnumerator = reader.GetEnumerator()
' Keep track of whether the row to be deleted
' has actually been deleted yet. This allows
' this sample to demonstrate that the enumerator
' is able to survive row deletion.
Dim isRowDeleted As Boolean = False
While (enumerator.MoveNext())
Dim dataRecord As DbDataRecord = CType(enumerator.Current, _
DbDataRecord)
' While the enumerator is active, delete a row.
' This doesn't affect the behavior of the enumerator.
If Not isRowDeleted Then
isRowDeleted = True
userTable.Rows(2).Delete()
End If
Console.WriteLine(dataRecord.GetString(1))
End While
Catch ex As Exception
Console.WriteLine(ex)
End Try
Console.ReadLine()
End Sub
このプロシージャは、コンソール ウィンドウに次のテキストを表示します。
Peter
Mary
Russ
注釈
列挙子は、 内のデータの読み取りのみを許可します DataTableReader。 列挙子を使用して、基になるコレクションを変更することはできません。
最初は、列挙子はコレクション内の最初の要素の前に配置されます。 この位置で Current を呼び出すと、例外がスローされます。 そのため、MoveNext
の値を読み取る前に、Current
を呼び出して列挙子をコレクションの最初の要素に進める必要があります。
Current
は をDbDataRecord返し、 または Reset が呼び出されるまで同じオブジェクトをMoveNext返します。 MoveNext
は、Current
を次の要素に進めます。
コレクションの末尾が渡されると、列挙子はコレクション内の最後の要素の後に配置され、 を呼び出すと MoveNext
false が返されます。 前回 MoveNext
を呼び出して false
が返された場合に、Current
を呼び出すと例外がスローされます。 さらに、 はデータへの前方専用アクセスを提供するため DataTableReader 、IEnumerator の メソッドを Reset 呼び出すと が NotSupportedExceptionスローされます。
は DataTableReader 、安定した列挙子を提供します。 つまり、基になるデータ内で行の削除や追加が行われても、 の GetEnumerator 呼び出しによって返される列挙子は引き続き有効です。
適用対象
.NET