簡體   English   中英

如何將 C# lambda 表達式轉換為委托?

[英]How do I convert a C# lambda expression into a delegate?

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

假設我有一個例子

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);

但我想我錯了。

如果我理解正確,您可以簡單地將 lambda 表達式轉換為委托(匿名方法表達式),而無需創建新的委托類型。

改變這個:

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

進入

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

我可以 go 的上下文不多,但是DataReceivedEventHandler的簽名是public delegate void DataReceivedEventHandler(object sender, DataReceivedEventArgs e); . 它有兩個 arguments 並且您正在嘗試傳遞一個帶有三個 arguments 的委托: (object s,DataReceivedEventArgs e, string mystring)

我的猜測是您必須刪除第三個參數string mystring

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM