我希望我的问题标题措辞恰当。
在 c# 中,我可以使用 lambdas(作为委托)或旧的委托语法来执行此操作:
Func<string> fnHello = () => "hello";
Console.WriteLine(fnHello());
Func<string> fnHello2 = delegate()
{
return "hello 2";
};
Console.WriteLine(fnHello2());
那么为什么我不能“内联” lambda 或委托主体,并避免在命名变量中捕获它(使其匿名)?
// Inline anonymous lambda not allowed
Console.WriteLine(
(() => "hello inline lambda")()
);
// Inline anonymous delegate not allowed
Console.WriteLine(
(delegate() { return "hello inline delegate"; })()
);
一个适用于 javascript 的示例(仅用于比较)是:
alert(
(function(){ return "hello inline anonymous function from javascript"; })()
);
这会产生预期的警报框。
更新:如果你适当地转换,你似乎可以在 C# 中使用内联匿名 lambda,但是 () 的数量开始使它变得不守规矩。
// Inline anonymous lambda with appropriate cast IS allowed
Console.WriteLine(
((Func<string>)(() => "hello inline anonymous lambda"))()
);
也许编译器无法推断匿名委托的信号来知道您要调用哪个 Console.WriteLine() ?有谁知道为什么需要这个特定的演员表?