DataTableReader.GetEnumerator Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Öğe koleksiyonunda yinelemek için kullanılabilecek bir numaralandırıcı döndürür.
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
Döndürülenler
IEnumerator Öğe koleksiyonunu temsil eden bir nesne.
Özel durumlar
Kapalı bir içindeki bir sütunu okuma veya sütuna erişme girişiminde bulunuldu DataTableReader.
Örnekler
Aşağıdaki örnekte yönteminin kullanımı gösterilmektedir GetEnumerator . Bu, numaralandırıcı etkinken satırlar temel alınandan DataTable silindiğinde numaralandırıcının davranışını içerir.
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
Yordam, Konsol penceresinde aşağıdaki metni görüntüler:
Peter
Mary
Russ
Açıklamalar
Numaralandırıcılar yalnızca içindeki DataTableReaderverilerin okunmasına izin verir. Numaralandırıcılar, temel alınan koleksiyonu değiştirmek için kullanılamaz.
İlk başta, numaralandırıcı koleksiyondaki ilk öğeden önce konumlandırılır. Bu konumda çağrısı Current bir özel durum oluşturur. Bu nedenle, değerini MoveNextokumadan önce numaralandırıcıyı koleksiyonun ilk öğesine ilerletmek için çağrısında Current bulunmalısınız.
Currentbir DbDataRecorddöndürür ve veya MoveNext çağrılana kadar Reset aynı nesneyi döndürür.
MoveNext bir sonraki öğeye ayarlar Current .
Koleksiyonun sonu geçirildikten sonra, numaralandırıcı koleksiyondaki son öğeden sonra konumlandırılır ve çağrılan MoveNext false döndürür. döndürülen MoveNextson çağrı false ise çağrısı Current bir özel durum oluşturur. Ayrıca , DataTableReader verilerine yalnızca ileriye doğru erişim sağladığından, IEnumerator yöntemini çağırmak Reset bir NotSupportedExceptionoluşturur.
kararlı DataTableReader bir numaralandırıcı sağlar. Bu, temel alınan veriler içinde satır silme veya eklemeler gerçekleşse bile çağrısı tarafından GetEnumerator döndürülen numaralandırıcının hala geçerli olduğu anlamına gelir.