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 會拋出例外。 因此,您必須先呼叫 MoveNext 列舉器先將列舉器推進到集合的第一個元素,再讀取 的 Current值。
Current 回傳一個 DbDataRecord,並返回相同的物件直到 MoveNext 被呼叫 或 Reset 。
MoveNext 設定 Current 為下一個元素。
當集合結束後,列舉器會被置於集合的最後一個元素之後,呼叫 MoveNext 則回傳 false。 如果最後一次呼叫回傳MoveNext,false呼叫Current會拋出例外。 此外,由於 僅 DataTableReader 提供前向存取,呼叫 Reset IEnumerator 的方法會拋 NotSupportedException出 。
提供 DataTableReader 穩定的列舉器。 這表示即使底層資料中發生了列刪除或新增,透過呼叫回 GetEnumerator 傳的列舉器仍然有效。