gpt4 book ai didi

c# - 为什么 C# 不能使用内联匿名 lambda 或委托(delegate)?

转载 作者:IT王子 更新时间:2023-10-29 04:16:19 26 4
gpt4 key购买 nike

<分区>

我希望我的问题标题措辞恰当。

在 c# 中,我可以使用 lambda(作为委托(delegate))或旧的委托(delegate)语法来执行此操作:

Func<string> fnHello = () => "hello";
Console.WriteLine(fnHello());

Func<string> fnHello2 = delegate()
{
return "hello 2";
};
Console.WriteLine(fnHello2());

那么,为什么我不能“内联”lambda 或委托(delegate)主体,并避免在命名变量中捕获它(使其匿名)?

// 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"))()
);

也许编译器无法推断匿名委托(delegate)的签名以了解您尝试调用哪个 Console.WriteLine()?有谁知道为什么需要这个特定的转换?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com