如何将 C# lambda 表达式转换为委托?

时间:2021-03-22 13:04:42

标签: c# .net lambda delegates

我不是很熟悉 lambda 和委托表达式,但我需要使用 .NET 2 框架,所以我必须使用委托。

假设我有一个例子

process = new Process(); 

并且我想通过自定义将其他参数传递给事件:

public void TestHandler(object s, DataReceivedEventArgs e, string mystring)
{
     Console.writeLine(e.Data + "," + mystring);
}
...

process.OutputDataReceived += new DataReceivedEventHandler((sender, e) => TestHandler(sender, e, "hello"));

我应该如何使用委托来做到这一点?

我尝试这样做:

public delegate void TestDelegate(object s, DataReceivedEventArgs e, string mystring);

..eg inside main

TestDelegate testDel = delegate(object s,DataReceivedEventArgs e, string mystring) { TestHandler (s, e, mystring); }; 

process.OutputDataReceived += new DataReceivedEventHandler(testDel);

但我想我错了。

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您可以简单地将 lambda 表达式转换为委托(匿名方法表达式),而无需创建新的委托类型。

改变这个:

(sender, e) => TestHandler(sender, e, "hello")

进入

delegate (object sender, DataReceivedEventArgs e) {
    TestHandler(sender, e, "hello");
}

答案 1 :(得分:0)

我无法了解很多上下文,但 DataReceivedEventHandler 的签名是 public delegate void DataReceivedEventHandler(object sender, DataReceivedEventArgs e);。它有两个参数,而您正试图传递一个包含三个参数的委托:(object s,DataReceivedEventArgs e, string mystring)

我猜您必须删除第三个参数 string mystring

相关问题