我有两个独立的行动,即调查员。
一个可以独立运行,另一个依赖于第一个运行后。
我虽然这样做会非常聪明:
public IEnumerator<IResult> DoStuffIndependently()
{
yield return this;
yield return that;
}
public IEnumerator<IResult> DoStuffBeforeSometimes()
{
yield return AffectThis;
yield return AffectThat;
yield return DoStuffIndependently();
}
这不起作用,也通过foreach也不起作用。我不想自己介绍一切,我猜这有一个非常简单的方法。
答案 0 :(得分:4)
方法是 迭代器块(yield return
等), xor 常规方法(return
等)。它不可能两者兼而有之。因此,要使用另一个迭代器,必须迭代它 - 即
yield return AffectThis;
yield return AffectThat;
using(var iter = DoStuffIndependently()) {
while(iter.MoveNext()) yield return iter.Current;
}
或者,您也许可以使用Concat
将两个现有的迭代器拼接在一起。
答案 1 :(得分:2)
使用IEnumerable
代替IEnumerator
,foreach
应该可以正常使用:
public IEnumerable<IResult> DoStuffIndependently()
{
yield return This;
yield return That;
}
public IEnumerable<IResult> DoStuffBeforeSometimes()
{
yield return AffectThis;
yield return AffectThat;
foreach (var x in DoStuffIndependently())
yield return x;
}
或者,请IEnumerator.MoveNext明确致电Marc suggested。
答案 2 :(得分:2)
如果你想让它成为IEnumerator而不是IEnumerable,你必须手动迭代它:
public IEnumerator<IResult> DoStuffIndependently() {
yield return this;
yield return that;
}
public IEnumerator<IResult> DoStuffBeforeSometimes() {
yield return AffectThis;
yield return AffectThat;
var dsi = DoStuffIndependently();
while (dsi.MoveNext()) yield return dsi.Current;
}