LINQPad 示例:
void Main()
{
One(i => PrintInteger(i));
One(PrintInteger);
Two(i => PrintInteger(i));
// Two(PrintInteger); - won't compile
}
static void One(Action<int> a)
{
a(1);
}
static void Two(Expression<Action<int>> e)
{
e.Compile()(2);
}
static void PrintInteger(int i)
{
Console.WriteLine(i);
}
取消注释该Two(PrintInteger);
行会导致错误:
无法从“方法组”转换为“System.Linq.Expressions.Expression<System.Action<int>>”
这类似于将方法组转换为表达式,但我对“为什么”感兴趣。我了解功能需要金钱、时间和精力;我想知道是否有更有趣的解释。