C#中delegate直接跟{}语句块的含义还是匿名方法吗?

平天定海 2019-01-17 10:23:13
在项目中我尝试给一个Click事件赋一个匿名方法:
Document.GetElementById("ok").Click += delegate (object sender, HtmlElementEventArgs e) { //DoSomething 
};

把参数去掉后自然报错,提示委托没有采用0参数。但问题是我把()去掉后又可以执行了……
 Document.GetElementById("ok").Click += delegate { //DoSomething
};

在这里,delegate{...} 是什么含义呢?没有提供参数,它还是匿名方法吗?
...全文
613 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
平天定海 2019-01-17
  • 打赏
  • 举报
回复
引用 1 楼 以专业开发人员为伍 的回复:
学学 c# 基本语法呗。
会不会是去掉括号后变成了不使用任何参数的匿名函数,加了括号就指向了具体的委托,需要有相应的参数。所以这里报错?刚好遇到这个问题,有点懵
  • 打赏
  • 举报
回复
学学 c# 基本语法呗。
平底锅锅锅 2019-01-17
  • 打赏
  • 举报
回复
是。只是有无参数的问题
wanghui0380 2019-01-17
  • 打赏
  • 举报
回复
你在匿名也得按照人家委托的申明写,你在Click处转到定义看看人家申明的原型是什么?
橘子皮... 2019-01-17
  • 打赏
  • 举报
回复
action 只有返回值没有参数,func有返回值和多个参数,好像是这样
  • 打赏
  • 举报
回复
你写的两种方法是一样的,都是匿名委托,
第二种没写不代表没有,如果你函数体内没有用到参数,省略写是没有问题的。
SDHU 2019-01-17
  • 打赏
  • 举报
回复
delegate{...} 还是匿名方法,只是匿名方法不需要使用任何参数,可以简化参数的列表,一般适用于下列两种条件同时为真的情况下:
1委托的参数列表不包含任何out参数的委托。

2,匿名方法不使用任何参数。

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧