DataTableReader.GetEnumerator 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
항목 컬렉션을 반복하는 데 사용할 수 있는 열거자를 반환합니다.
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 항목 컬렉션을 나타내는 개체입니다.
예외
닫힌 DataTableReader열의 열을 읽거나 액세스하려고 했습니다.
예제
다음 예제에서는 GetEnumerator 메서드를 사용하는 방법을 보여 줍니다. 여기에는 열거자가 활성 상태인 동안 행이 기본 DataTable 에서 삭제될 때 열거자의 동작이 포함됩니다.
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
이 프로시저는 콘솔 창에 다음 텍스트를 표시합니다.
Peter
Mary
Russ
설명
열거자는 .에서 DataTableReader만 데이터를 읽을 수 있습니다. 열거자를 사용하여 기본 컬렉션을 수정할 수 없습니다.
처음에는 열거자가 컬렉션의 첫 번째 요소 앞에 배치됩니다. 이 위치에서 호출 Current 은 예외를 throw합니다. 따라서 값을 MoveNext읽기 전에 열거자를 컬렉션의 첫 번째 요소로 이동하도록 호출 Current 해야 합니다.
Current 는 을 DbDataRecord반환하고, 호출될 MoveNextReset 때까지 동일한 개체를 반환합니다.
MoveNext 는 다음 요소로 설정 Current 됩니다.
컬렉션의 끝을 전달한 후 열거자는 컬렉션의 마지막 요소 앞에 배치되고 호출 MoveNext 은 false를 반환합니다. 반환MoveNext된 false 마지막 호출이 있으면 호출 Current 에서 예외가 throw됩니다. 또한 데이터에 DataTableReader 대한 정방향 전용 액세스를 제공하기 때문에 IEnumerator의 메서드를 호출 Reset 하면 .NotSupportedException
안정적인 DataTableReader 열거자를 제공합니다. 즉, 기본 데이터 내에서 행 삭제 또는 추가가 발생하더라도 호출 GetEnumerator 에서 반환된 열거자는 여전히 유효합니다.