我很想了解var
在这个特定场景中的行为。
var action = delegate (string s)
{
Console.WriteLine(s);
};
上述代码返回编译错误
无法将匿名类型分配给隐式类型变量
为什么C#编译器不尝试将Action<string>
委托分配给var
?
也许这是一个基本问题,但我只想了解这种行为。
我不知道为什么,也许没有实现,或者编译器有一些问题。
不要忘记,委托是方法签名/原型,而Action
是类型,这实际上不是一回事,即使delegate
可以在Action
或Func
中进行强制转换。
因此,如果你想使用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);