繁体   English   中英

更新匿名方法内的ref参数

[英]Update ref parameter inside anonymous method

是否有解决方法来更新匿名方法中的ref参数?

我知道匿名方法不允许访问外部作用域的ref参数,但还有另一种方法吗? 我正在为MessageStream使用外部库,因此无法更改委托的参数...

void DoWork(ref int count)
{
    MessageStream Stream = new MessageStream();
    Stream.MessageReceived += (o, args) =>
    {
        //Error cannot use ref or out parameter inside anonymous method
        count++;
    };
}

在您的情况下,没有可行的解决此问题的方法:当Stream.MessageReceived事件触发时, count可能远远超出DoWork函数调用者的范围。

在这种情况下,您应该将count封装在一个对象中,并在事件处理程序和调用者中保持对该对象的引用,如下所示:

class Counter {
    public int Value {get;private set;}
    public void Increment() {Value++;}
}
void DoWork(Counter count) {
    MessageStream Stream = new MessageStream();
    Stream.MessageReceived += (o, args) => {
        count.Increment();
    };
}

如果要让委托从外部作用域更新变量,请传递一个设置值的lambda,而不是通过ref传递count。

//shared var
private static int _count = 0;

//call your method
DoWork(() => _count++);  //instead of DoWork(ref _count);


void DoWork(Action countInc)
{
    MessageStream Stream = new MessageStream();
    Stream.Activated += (o, args) => countInc();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM