有yield return
返回集合中的下一個元素,然後有yield break
結束迭代。是否有一種yield continue
告訴循環控制器跳到下一個元素?產量繼續嗎?
這裏就是我想實現,但它顯然不建:
static IEnumerable<int> YieldTest()
{
yield return 1;
yield return 2;
yield continue;
yield return 4;
}
有yield return
返回集合中的下一個元素,然後有yield break
結束迭代。是否有一種yield continue
告訴循環控制器跳到下一個元素?產量繼續嗎?
這裏就是我想實現,但它顯然不建:
static IEnumerable<int> YieldTest()
{
yield return 1;
yield return 2;
yield continue;
yield return 4;
}
有沒有需要有一個單獨的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;
}
}
@Downvoter隨時評論你的問題,我的答案是錯的,這樣可以改進。 –
如果你想傳遞有關數據給調用者一個洞的信息,然後使用可空:
static IEnumerable<int?> YieldTest()
{
yield return 1;
yield return 2;
yield return null;
yield return 4;
}
如果你添加一些代碼來澄清這將有助於你正在努力達到什麼。 –
'產量持續'後,你預計會發生什麼?來電者會收到什麼?爲什麼不在'2'之後用'yield return 4;'去呢? – BartoszKP
@BartoszKP這就是*只是一個例子*。我也嘗試在我的方法中繼續使用,但它不會生成,因爲它無效。 – oscilatingcretin