![](/img/trans.png)
[英]Getting “Cannot use ref or out parameter inside an anonymous method, lambda expression, or query expression” for an “in” parameter
[英]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.