Пример 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 → '
Это похоже на Преобразование группы методов в выражение, но меня интересует "почему". Я понимаю, что Функции стоят денег, времени и усилий; Мне интересно, есть ли более интересные объяснения.