DataTableReader.GetEnumerator Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Devuelve un enumerador que puede utilizarse para recorrer una iteración en la colección de elementos.
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
Devoluciones
Objeto IEnumerator que representa la colección de elementos.
Excepciones
Se ha intentado la lectura o el acceso a una columna en un objeto DataTableReader cerrado.
Ejemplos
En el siguiente ejemplo se muestra el uso del método GetEnumerator. Esto incluye el comportamiento del enumerador cuando las filas se eliminan del subyacente DataTable mientras el enumerador está activo.
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
El procedimiento muestra el texto siguiente en la ventana Consola:
Peter
Mary
Russ
Comentarios
Los enumeradores solo permiten leer los datos de .DataTableReader Los enumeradores no se pueden usar para modificar la colección subyacente.
Al principio, el enumerador se coloca delante del primer elemento de la colección. En esta posición, la llamada Current produce una excepción. Por lo tanto, debe llamar a MoveNext
para adelantar el enumerador hasta el primer elemento de la colección antes de leer el valor de Current
.
Current
devuelve un DbDataRecordy devuelve el mismo objeto hasta que MoveNext se llama a o Reset . MoveNext
establece Current
en el siguiente elemento.
Después de pasar el final de la colección, el enumerador se coloca después del último elemento de la colección y la llamada a MoveNext
devuelve false. Si se devuelve false
la última llamada a MoveNext
, al llamar Current
se produce una excepción. Además, dado que DataTableReader proporciona acceso de solo avance a sus datos, al llamar al Reset método del IEnumerator se produce un NotSupportedException.
DataTableReader proporciona un enumerador estable. Esto significa que incluso si se producen eliminaciones de filas o adiciones dentro de los datos subyacentes, el enumerador devuelto por una llamada a GetEnumerator sigue siendo válido.