在此代码片段中:
List<String> names = new List<String>();
names.Add("Bruce");
names.Add("Tom");
names.Add("Tim");
names.Add("Richard");
names.ForEach(x => Print(x));
private static string Print(string s)
{
Console.WriteLine(s);
return s;
}
Print
不是一个Action
肯定是因为它正在返回string
;然而x=> Print(x)
也就是为什么?
lambda 表达式的类型x => Print(x)
是根据其上下文确定的。由于编译器知道 lambda 被分配给Action<string>
,编译器忽略返回类型Print(s)
方法就好像它是一个陈述表达式.
这是一个有效的转换:
Action<string> myAction = y => Print(y);
换句话说,两者
Print("something");
and
int x = Print("something");
是正确的用法Print
方法;它们可以以相同的方式在 lambda 中使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)