LINQPad dụ:Tại sao lambdas có thể chuyển đổi thành các biểu thức nhưng các nhóm phương pháp thì không?
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);
}
uncommenting các Two(PrintInteger);
kết quả dòng trong một lỗi: "tại sao"
cannot convert from 'method group' to 'System.Linq.Expressions.Expression<System.Action<int>>'
này tương tự như Convert Method Group to Expression, nhưng tôi quan tâm đến Tôi hiểu rằng Features cost money, time and effort; Tôi tự hỏi nếu có một lời giải thích thú vị hơn.
Có lẽ nó liên quan đến thực tế là trình biên dịch chỉ có thể chuyển * biểu hiện lambdas * thành cây biểu thức. Báo cáo và lambdas đa dòng không được hỗ trợ. Xem: [Cây biểu hiện] (http://msdn.microsoft.com/en-us/library/bb397951.aspx) –