c# - 如何在 lambda 表达式中传递 ref 参数? - 线程问题

标签 c# multithreading lambda ref

我有一个方法要调用。

public void RecordConversation(ref ChannelResource cr)
{
    VoiceResource RecordResource = TServer.GetVoiceResource();
    RecordResource.MaximumTime = 6000;
    RecordResource.MaximumSilence = 6000;
    RecordResource.TerminationDigits = "";
}

在线程中调用

Thread recordThread = new Thread(() => RecordConversation(ref ChanResource));
recordThread.Start();

当然我们会得到一个错误。

Cannot use ref or out parameter 'ChanResource' inside an anonymous method, lambda expression, or query expression

如何解决?

最佳答案

为什么会出现这个错误?

The scope of the parameters of an anonymous method is the anonymous-method-block.

(强调我的)

lambda 表达式本质上与匿名方法相同。

根据文档,参数的范围仅限于其 block 。

但是 refout 超出了范围,因此出现了错误。我建议您不要使用 ref,因为默认情况下参数是按值传递的,如果是引用类型,reference 的值已通过。

您可以直接修改参数以反射(reflect)该更改。

关于c# - 如何在 lambda 表达式中传递 ref 参数? - 线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23476543/

相关文章:

c# - 继承缺失定义

C# - 避免按下按钮/垃圾邮件时出现延迟

c++ - 如何正确设计工作线程? (例如避免 sleep (1))

java - 当在运行时收到谓词函数的名称时,如何将函数作为谓词传递给另一个函数?

python很难设置lambda函数

c# - 我可以为 UWP 的 BackgroundTask 设置多个触发器吗?

c# - 获取公共(public)/外部 IP 地址?

java - C# 相当于 Java 的同步 (abc.class)

java - 增加no时,Java CPU密集型应用程序停止/挂起。 worker 。瓶颈在哪里,以及如何在Ubuntu服务器上推断/监视瓶颈?

java - 在参数中给定多个条件时过滤流