DataTableReader.GetEnumerator DataTableReader.GetEnumerator DataTableReader.GetEnumerator DataTableReader.GetEnumerator Method

Определение

Возвращает перечислитель, который может использоваться для перемещения по коллекции элементов.Returns an enumerator that can be used to iterate through the item collection.

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

Возвраты

Объект IEnumerator, представляющий коллекцию элементов.An IEnumerator object that represents the item collection.

Исключения

Предпринята попытка чтения или доступа к столбцу закрытого объекта DataTableReader.An attempt was made to read or access a column in a closed DataTableReader.

Примеры

В следующем примере иллюстрируется использование метода GetEnumerator.The following example demonstrates the use of the GetEnumerator method. Это включает поведение перечислителя при удалении строк из базового DataTable объекта, когда перечислитель активен.This includes the behavior of the enumerator when rows are deleted from the underlying DataTable while the enumerator is active.

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

Процедура отображает следующий текст в окне консоли:The procedure displays the following text in the Console window:

Peter  
Mary  
Russ  

Комментарии

Перечислители позволяют только считывать данные в DataTableReader.Enumerators only allow for reading the data in the DataTableReader. Перечислители не могут использоваться для изменения базовой коллекции.Enumerators cannot be used to modify the underlying collection.

Сначала перечислитель располагается перед первым элементом в коллекции.At first, the enumerator is positioned before the first element in the collection. В этой позиции вызов Current создает исключение.At this position, calling Current throws an exception. Поэтому необходимо вызвать метод MoveNext, чтобы переместить перечислитель к первому элементу коллекции до считывания значения свойства Current.Therefore, you must call MoveNext to advance the enumerator to the first element of the collection before reading the value of Current.

CurrentВозвращает, и возвращает тот же объект, MoveNext пока не будет вызван метод или. Reset DbDataRecordCurrent returns a DbDataRecord, and returns the same object until either MoveNext or Reset is called. MoveNext задает Current в качестве значения для следующего элемента.MoveNext sets Current to the next element.

После передачи конца коллекции перечислитель размещается после последнего элемента в коллекции, а вызов MoveNext возвращает false.After the end of the collection is passed, the enumerator is positioned after the last element in the collection, and calling MoveNext returns false. Если последний вызов MoveNext возвращал false, вызов Current создает исключение.If the last call to MoveNext returned false, calling Current throws an exception. Кроме того, поскольку DataTableReader предоставляет доступ к данным только для прямого доступа, Reset вызов метода IEnumerator создает исключение NotSupportedException.In addition, because the DataTableReader provides forward-only access to its data, calling the Reset method of the IEnumerator throws a NotSupportedException.

DataTableReader Предоставляет стабильный перечислитель.The DataTableReader provides a stable enumerator. Это означает, что даже если удаление строк или дополнений происходит в базовых данных, перечислитель, возвращаемый вызовом GetEnumerator , по-прежнему является допустимым.This means that even if row deletions or additions occur within the underlying data, the enumerator returned by a call to GetEnumerator is still valid.

Применяется к