我正在学习lambda表达式和委托.虽然我尝试执行以下操作,但我在标记为粗线的行处收到错误.(错误:运算符'+ ='不能应用于'Test.MessageDelegate'和'lambda expression'类型的操作数.)帮我处理lambda表达式.
namespace Test
{
public delegate void MessageDelegate(string title,object sender,EventArgs e);
class Program
{
static event MessageDelegate logEvent;
static void Main(string[] args)
{
logEvent = new MessageDelegate(OnLog);
logEvent("title",Program.logEvent,EventArgs.Empty);
Run Code Online (Sandbox Code Playgroud)
logEvent + =(src,e)=> {OnLog("Some",src,e); };
Console.ReadKey(true);
}
static void OnLog(string title, object sender, EventArgs e)
{
if (logEvent != null)
{
Console.WriteLine("title={0}", title);
Console.WriteLine("sender={0}", sender);
Console.WriteLine("arguments={0}",e.GetType());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于logEvent具有MessageDelegate事件处理程序,因此您需要lambda表达式的左手(src, e)来匹配签名MessageDelegate
改成 (str, src, e) => OnLog(str, src, e)