如何得到回报的内部匿名方法? [英] How to yield return inside anonymous methods?

查看:176
本文介绍了如何得到回报的内部匿名方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基本上我有我使用的匿名方法我的BackgroundWorker

Basically I have an anonymous method that I use for my BackgroundWorker:

worker.DoWork += ( sender, e ) =>
{
    foreach ( var effect in GlobalGraph.Effects )
    {
        // Returns EffectResult
        yield return image.Apply (effect);
    }
};

当我这样做,编译器告诉我:

When I do this the compiler tells me:

yield语句不能使用   匿名方法或lambda内   EX pression

"The yield statement cannot be used inside an anonymous method or lambda expression"

因此​​,在这种情况下,什么是最优雅的方式来做到这一点?顺便说一句这DoWork的方法是一个静态方法里面,以免事项的解决方案。

So in this case, what's the most elegant way to do this? Btw this DoWork method is inside a static method, in case that matters for the solution.

推荐答案

好了,所以我做了这样的事情该做什么,我想要的(一些变量略):

Ok so I did something like this which does what I wanted (some variables omitted):

public static void Run ( Action<float, EffectResult> action )
{
    worker.DoWork += ( sender, e ) =>
    {
        foreach ( var effect in GlobalGraph.Effects )
        {
            var result = image.Apply (effect);

            action (100 * ( index / count ), result );
        }
    }
};

然后在调用点:

and then in the call site:

GlobalGraph.Run ( ( p, r ) =>
    {
        this.Progress = p;
        this.EffectResults.Add ( r );
    } );

这篇关于如何得到回报的内部匿名方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆