當使用yield關鍵字時,這就意味著該函式返回的是乙個迭代器(iterator),不用自己維護乙個迭代器內部的狀態管理(比如c++中的itereator,或實現c#中實現的介面iemuerator),其使用模式如下:
yield return ;
yield break;
其中第二種用於for迴圈終止。這樣的模式也就實現了linq的查詢,但注意yield使用要求如下:
1. 迭代器函式不能有ref/out引數。
2. 迭代器函式返回必須是ienumberable、ienumerable、ienumerator或ienumerator。
3. yield 不能用於匿名函式返回。
4. yield return不能位於try/catch語句中,可以位於try/finally語句try語句中。
5. yield break可以位於try/cache語句中,不能位於try/finllay語句finally語句中。
測試**如下:
class program
}public static ienumerablenames
}static void main(string args)
", item);
}foreach (var item in names)
", item);
}console.readline();
}}
具體可參考
:
C 關鍵字之yield
說起yield,不得不先說說迭代器。迭代器是c 2.0中的新功能,有了它,我們就可以在自己的類或者結構中支援foreach迭代而不必實現整個ienumerable介面,我們只需要提供乙個迭代器,即可遍歷類中的資料結構。當編譯器檢測到迭代器時,它將自動生成ienumerable介面的current m...
Python的yield關鍵字
忽然得知python有個叫yield的關鍵字,好奇之下去查了查,花了點時間基本弄明白了,故寫在此備忘,順便充充字數。yield關鍵字用來定義生成器 generator 其具體功能是可以當return使用,從函式裡返回乙個值,不同之處是用yield返回之後,可以讓函式從上回yield返回的地點繼續執行...
C 中yield關鍵字
yield關鍵字向編譯器指示它所在的方法是迭代器塊。編譯器生成乙個類來實現迭代器塊中標的行為。在迭代器中,yieid關鍵字與return關鍵字結合使用,向列舉器物件提供值。這是乙個返回值,例如,在foreach語句的每一次迴圈中返回的值。yieid關鍵字也可與break結合使用,表示迭代結束。usi...