2016-10-10 33 views
1

yield return返回集合中的下一個元素,然後有yield break結束迭代。是否有一種yield continue告訴循環控制器跳到下一個元素?產量繼續嗎?

這裏就是我想實現,但它顯然不建:

static IEnumerable<int> YieldTest() 
{ 
    yield return 1; 
    yield return 2; 
    yield continue; 
    yield return 4; 
} 
+3

如果你添加一些代碼來澄清這將有助於你正在努力達到什麼。 –

+4

'產量持續'後,你預計會發生什麼?來電者會收到什麼?爲什麼不在'2'之後用'yield return 4;'去呢? – BartoszKP

+1

@BartoszKP這就是*只是一個例子*。我也嘗試在我的方法中繼續使用,但它不會生成,因爲它無效。 – oscilatingcretin

回答

9

有沒有需要有一個單獨的yield continue聲明。只需使用continue或任何其他條件語句即可在枚舉算法中跳過元素。

使用yield的枚舉算法由編譯器內部轉換爲狀態機,可以多次調用它。 yield這一點是它產生一個輸出,有效地暫停/停止使用它的地方的狀態機。關於狀態機的行爲,可能的影響是yield continue。因此它不是必需的。

例子:

static IEnumerable<int> YieldTest() 
{ 
    for (int value = 1; value <= 4; value++) 
    { 
     if (value == 3) continue; // alternatively use if (value != 3) { … } 
     yield return value; 
    } 
} 
+0

@Downvoter隨時評論你的問題,我的答案是錯的,這樣可以改進。 –

0

如果你想傳遞有關數據給調用者一個洞的信息,然後使用可空:

static IEnumerable<int?> YieldTest() 
{ 
    yield return 1; 
    yield return 2; 
    yield return null; 
    yield return 4; 
}