DataTableReader.GetEnumerator Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Egy enumerátort ad vissza, amely az elemgyűjteményen keresztüli iterálásra használható.
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
Válaszok
Az IEnumerator elemgyűjteményt jelképező objektum.
Kivételek
Egy bezárt DataTableReaderoszlop olvasására vagy elérésére tett kísérletet.
Példák
Az alábbi példa a GetEnumerator metódus használatát mutatja be. Ez magában foglalja az enumerátor viselkedését, amikor a sorok törlődnek az alapul szolgálóból DataTable , miközben az enumerátor aktív.
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
Az eljárás a következő szöveget jeleníti meg a konzolablakban:
Peter
Mary
Russ
Megjegyzések
Az enumerátorok csak a DataTableReader. Az enumerátorok nem használhatók a mögöttes gyűjtemény módosítására.
Először az enumerátor a gyűjtemény első eleme elé kerül. Ebben a helyzetben a hívás Current kivételt eredményez. Ezért a gyűjtemény értékének olvasása előtt meg kell hívnia MoveNext , hogy az enumerátort a gyűjtemény első elemére irányozza Currentelő.
Current visszaad egy DbDataRecord, és ugyanazt az objektumot adja vissza, amíg vagy nem MoveNextReset lesz meghívva.
MoveNext elemet a következő elemre állítja Current .
A gyűjtemény befejezése után az enumerátor a gyűjtemény utolsó eleme után lesz elhelyezve, és a hívás MoveNext hamis értéket ad vissza. Ha az utolsó visszaküldött MoveNextfalsehívás kivételt Current eredményez. Emellett mivel a DataTableReader rendszer csak előre hozzáférést biztosít az adataihoz, az Reset IEnumerator metódusának meghívása egy NotSupportedException.
Ez DataTableReader stabil enumerátort biztosít. Ez azt jelenti, hogy a hívás által visszaadott enumerátor akkor is érvényes, ha a mögöttes adatok között sortörlések vagy összeadások történnek GetEnumerator .