【发布时间】:2010-07-15 21:54:52
【问题描述】:
我有一个方法Foo.LongRunningMethod(),它做了一些可能会持续很长时间的非常复杂的处理。在此过程中,它会在遇到特定条件时触发Foo.InterestingEvent。我希望能够公开这些事件的枚举,并且我希望能够在 LongRunningMethod 实际完成之前开始迭代。换句话说,我想要的是这样的:
public IEnumerable<InterestingObject> GetInterestingObjects()
{
foo.InterestingEvent += (obj) => { yield return obj; }
foo.LongRunningMethod();
yield break;
}
但是,这不起作用,因为您不能从匿名方法中yield return(并且因为使用yield 的方法不能返回void,我们的事件处理程序会这样做)。还有另一个成语可以让我做到这一点吗?或者这只是一个坏主意?
【问题讨论】: