我最近一直在閱讀有關延遲執行、LINQ、一般查詢等的文章和檔案,并且經常出現短語“物件被列舉”。有人可以解釋當一個物件被列舉時會發生什么嗎?
示例文章。
該方法是通過使用延遲執行來實作的。立即回傳值是一個存盤執行操作所需的所有資訊的物件。在通過直接呼叫其 GetEnumerator 方法或在 Visual C# 中使用 foreach列舉物件之前,不會執行此方法表示的查詢
uj5u.com熱心網友回復:
列舉的一般說明
IEnumerable是一個介面,通常由 C# 中的集合型別實作。例如List,Queue或Array。
IEnumerable提供了一個方法GetEnumerator,它回傳一個型別的物件IEnumerator。
的IEnumerator基本上代表“向前移動指標”發送給集合中的元素。
IEnumerator已:
- 屬性
Current,它回傳它當前指向的物件(例如集合中的第一個物件)。 - 一個方法
MoveNext,它將指標移動到下一個元素。呼叫它后,Current將持有對集合中第二個物件的參考。如果集合中沒有更多元素,MoveNext將回傳false。
每當foreach執行回圈時,IEnumerator都會檢索并MoveNext為每次迭代呼叫。您在回圈標頭中定義的變數用IEnumerator's填充Current。
報價單
在通過直接呼叫其 GetEnumerator 方法或在 Visual C# 中使用 foreach 列舉物件之前,不會執行此方法表示的查詢。
基本上它已經告訴你一切。我認為這種混亂只是因為缺乏對列舉的知識。只要有人呼叫GetEnumerator,就會執行該方法。GetEnumerator一旦您將物件放入foreach回圈中,就會自動呼叫。
uj5u.com熱心網友回復:
我認為您只需要很好地了解 LINQ 查詢的延遲執行與立即執行。
延遲執行:當您撰寫 LINQ 查詢時,它僅在您實際訪問結果時才執行 - 延遲到您運行代碼進行迭代,即foreach對結果進行迭代。這是默認行為。
立即執行:我們可以通過ToList()向查詢附加一個或類似的方法來強制執行此操作(您將在 C# 代碼中經常看到)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318191.html
上一篇:將表連接到與父表相關的表
下一篇:Linq串列選擇上的不同結果
