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 v kolekci 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 DataTableReadersloupci .
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 objektu DataTable , zatímco je enumerátor 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
V okně konzoly se zobrazí následující text:
Peter
Mary
Russ
Poznámky
Enumerátory umožňují čtení pouze 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. Volání na této pozici Current vyvolá výjimku. Proto je nutné volat MoveNext , aby se enumerátor před čtením hodnoty Current.
Current vrátí hodnotu a DbDataRecordvrátí stejný objekt, dokud se nevolá MoveNext nebo Reset nevolá.
MoveNext nastaví Current na další prvek.
Po předání konce kolekce je enumerátor umístěn za posledním prvkem v kolekci a volání MoveNext vrátí false. Pokud se vrátí poslední volání MoveNextfalse, vyvolá volání Current výjimku. Vzhledem k tomu, že DataTableReader poskytuje přístup pouze ke svým datům, volání Reset metody IEnumerator vyvolá NotSupportedExceptionvýjimku .
Poskytuje DataTableReader stabilní enumerátor. To znamená, že i když dojde k odstranění nebo sčítání řádků v podkladových datech, enumerátor vrácený voláním GetEnumerator je stále platný.