DataTableReader.GetEnumerator Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vrátí enumerátor, který lze použít k iteraci kolekcí položek.
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
Návraty
Objekt IEnumerator , který představuje kolekci položek.
Výjimky
Došlo k pokusu o čtení nebo přístup ke sloupci v uzavřeném DataTableReaderobjektu .
Příklady
Následující příklad ukazuje použití GetEnumerator metody. To zahrnuje chování enumerátoru při odstranění řádků z podkladového DataTable objektu, zatímco je výčet aktivní.
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
Procedura zobrazí v okně konzoly následující text:
Peter
Mary
Russ
Poznámky
Enumerátory umožňují pouze čtení dat v souboru DataTableReader. Enumerátory nelze použít k úpravě podkladové kolekce.
Nejprve je enumerátor umístěn před prvním prvkem v kolekci. V této pozici vyvolá volání Current výjimku. Proto je nutné před čtením hodnoty Current
volatMoveNext
, aby se enumerátor přepojí na první prvek kolekce.
Current
DbDataRecordvrátí a vrátí stejný objekt, dokud se nevolá nebo MoveNextReset. MoveNext
nastaví Current
na další prvek.
Po předání konce kolekce se enumerátor umístí za poslední prvek v kolekci a volání MoveNext
vrátí hodnotu false. Pokud se poslední volání vrátilo false
, MoveNext
vyvolá volání Current
výjimku. Kromě toho, protože DataTableReader poskytuje pouze dopředný přístup k datům, volání Reset metody IEnumerator vyvolá NotSupportedException.
Poskytuje DataTableReader stabilní enumerátor. To znamená, že i když v podkladových datech dojde k odstranění nebo sčítání řádků, je výčet vrácený voláním GetEnumerator stále platný.