sha*_*wat 2 c# events event-handling
我在stackoverflow的答案中找到了这段代码.htmlWeb.PreRequest似乎不是一个事件处理程序,因为+= tab tab没有生成所需的代码,它在IntelliSense中的符号告诉我它是一个普通的成员变量.
请解释一下这个语法.这是一个事件处理程序还是其他的东西?我见过+=通常用于添加事件处理程序.我在Google上搜索了"在c#中添加事件处理程序的方法"之类的术语,但找不到任何此类代码.
请帮我理解这段代码.我理解这段代码的含义,但不理解语法.任何其他的例子将不胜感激.
HtmlWeb htmlWeb = new HtmlWeb();
htmlWeb.PreRequest += request =>
{
request.CookieContainer = new System.Net.CookieContainer();
return true;
};
Run Code Online (Sandbox Code Playgroud)
你的代码:
HtmlWeb htmlWeb = new HtmlWeb();
htmlWeb.PreRequest += request =>
{
request.CookieContainer = new System.Net.CookieContainer();
return true;
};
Run Code Online (Sandbox Code Playgroud)
实际上是等价的:
bool PreRequest_EventHandler(HttpWebRequest request)
{
request.CookieContainer = new System.Net.CookieContainer();
return true;
}
//...
HtmlWeb htmlWeb = new HtmlWeb();
htmlWeb.PreRequest += PreRequest_EventHandler;
Run Code Online (Sandbox Code Playgroud)
关键的区别在于它使用lambda表达式语法而不是声明一个单独的方法.正如在链接的MSDN中所说,artcile lambda语法具有以下形式:
(input parameters) => expression
Run Code Online (Sandbox Code Playgroud)
所以request =>在你的代码中是输入参数.括号被省略,因为只有一个参数.如果有两个或更多,那就是(x,y)=>....