C# 为什么我们不能将委托匿名方法分配给 var 关键字



我很想了解var在这个特定场景中的行为。

var action = delegate (string s)
{
Console.WriteLine(s);
};

上述代码返回编译错误

无法将匿名类型分配给隐式类型变量

为什么C#编译器不尝试将Action<string>委托分配给var

也许这是一个基本问题,但我只想了解这种行为。

我不知道为什么,也许没有实现,或者编译器有一些问题。

不要忘记,委托是方法签名/原型,而Action是类型,这实际上不是一回事,即使delegate可以在ActionFunc中进行强制转换。

因此,如果你想使用var关键字,你可以写:

var action = (Action<string>)delegate(string s)
{
Console.WriteLine(s);
};

此外,您还可以简单地使用lambda来获得更干净的代码:

Action<string> action = str =>
{
Console.WriteLine(str);
};

只有一条指令:

Action<string> action = text => Console.WriteLine(text);

最新更新