C#的Lambda表达式必须有个名字么?

yaos 2011-06-04 06:19:46
int i = (x=>x+1)(5);
通不过编译的。
必须
Func<int, int> f;
f = (x=>x+1);
f(5);
或者
int i = (f=(x=>x+1)(5);
...全文
154 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaos 2011-06-05
  • 打赏
  • 举报
回复
我就是感叹,C#并不是完全Lambda的
  • 打赏
  • 举报
回复
当你写
f = (x=>x+1);
这个时候编译器才知道你要创建一个Func<int, int>委托并且赋值给变量f。
  • 打赏
  • 举报
回复
Lamda表达式并不重要。delegate是一个对象,这才重要。你是用Lamda表达式来创建一个delegate,然后调用这个delegate。符合这个语法编译器才看得懂你在干什么。
isjoe 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 yaos 的回复:]
int i = (x=>x+1)(5);
通不过编译的。
必须
Func<int, int> f;
f = (x=>x+1);
f(5);
或者
int i = (f=(x=>x+1)(5);
[/Quote]

lambda是委托的实现,你在定义委托的同时又执行它肯定不行。。。
必须先定义,再调用才可以,你后来写的可以编译通过的形式都是先定义,后调用的形式了。
threenewbee 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yaos 的回复:]
这样可以过编译,哎
int i = (new Func<int, int>(f => f + 1))(5);
[/Quote]
你已经把答案说了。
q107770540 2011-06-04
  • 打赏
  • 举报
回复
“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型。


delegate int del(int i);
void Main()
{
del myDelegate=x=>x+1;
int j=myDelegate(5);
Console.WriteLine(j);
}
yaos 2011-06-04
  • 打赏
  • 举报
回复
这样可以过编译,哎
int i = (new Func<int, int>(f => f + 1))(5);

110,537

社区成员

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

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

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