[英]How do I return a delegate function or a lambda expression in c#?
[英]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.