C 關鍵字之yield

2021-05-22 02:49:25 字數 1679 閱讀 6939

說起yield,不得不先說說迭代器。

迭代器是c# 2.0中的新功能,有了它,我們就可以在自己的類或者結構中支援foreach迭代而不必實現整個ienumerable介面,我們只需要提供乙個迭代器,即可遍歷類中的資料結構。當編譯器檢測到迭代器時,它將自動生成ienumerable介面的current、movenext和dispose方法。

而迭代器**使用yield return語句依次返回每個元素。yield break將中止迭代。到達yield return語句時,會儲存當前迭代的位置,下次呼叫迭代器時將從此位置開始執行。

在下面的示例中,迭代器塊(這裡是方法power(int number, int power))中使用了 yield 語句。當呼叫 power 方法時,它返回乙個包含數字冪的可列舉物件。注意 power 方法的返回型別是 ienumerable(一種迭代器介面型別)。

// yield-example.cs

using system;

using system.collections;

public

class list }

static

void main()

", i);

} } }

yield(c# 參考)

在迭代器塊中用於向列舉數物件提供值或發出迭代結束訊號。它的形式為下列之一:

複製**

yield return ;

yield break;

計算表示式並以列舉數物件值的形式返回;expression

必須可以隱式轉換為迭代器的 yield 型別。

yield語句只能出現在iterator塊中,該塊可用作方法、運算子或訪問器的體。這類方法、運算子或訪問器的體受以下約束的控制:

yield語句不能出現在匿名方法中。有關更多資訊,請參見匿名方法(c# 程式設計指南)。

當和 expression

一起使用時,yield return語句不能出現在catch塊中或含有乙個或多個catch子句的try塊中。有關更多資訊,請參見異常處理語句(c# 參考)。

在下面的示例中,迭代器塊(這裡是方法 power(int number, int power))中使用了yield語句。當呼叫power方法時,它返回乙個包含數字冪的可列舉物件。注意power方法的返回型別是ienumerable(一種迭代器介面型別)。

複製**

// yield-example.cs

using system;

using system.collections;

public class list

}static void main()

", i);}}

}

輸出

C 中yield關鍵字

yield關鍵字向編譯器指示它所在的方法是迭代器塊。編譯器生成乙個類來實現迭代器塊中標的行為。在迭代器中,yieid關鍵字與return關鍵字結合使用,向列舉器物件提供值。這是乙個返回值,例如,在foreach語句的每一次迴圈中返回的值。yieid關鍵字也可與break結合使用,表示迭代結束。usi...

C 關鍵字之yield 迭代器

今天講到迭代器,對迭代器中yield關鍵字做了研究。說起yield,不得不先說說迭代器。迭代器是c 2.0中的新功能,有了它,我們就可以在自己的類或者結構中支援foreach迭代而不必實現整個ienumerable介面,我們只需要提供乙個迭代器,即可遍歷類中的資料結構。當編譯器檢測到迭代器時,它將自...

學習yield關鍵字

當使用yield關鍵字時,這就意味著該函式返回的是乙個迭代器 iterator 不用自己維護乙個迭代器內部的狀態管理 比如c 中的itereator,或實現c 中實現的介面iemuerator 其使用模式如下 yield return yield break 其中第二種用於for迴圈終止。這樣的模式...