gpt4 book ai didi

c# - 为什么 lambda 可以转换为表达式而方法组不能?

转载 作者:可可西里 更新时间:2023-11-01 09:08:12 25 4
gpt4 key购买 nike

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); 行会导致错误:

cannot convert from 'method group' to 'System.Linq.Expressions.Expression<System.Action<int>>'

这类似于 Convert Method Group to Expression ,但我对“为什么”感兴趣。我明白 Features cost money, time and effort ;我想知道是否有更有趣的解释。

最佳答案

因为,为了获得表达式树,我们需要以(未编译的) 形式表示方法。 Lambda 表达式在源代码中是本地可用的,因此总是未编译就可用。但是方法可能不来自当前程序集内部,因此可能仅以编译形式提供。

诚然,C# 编译器可以反编译程序集的 IL 代码以检索表达式树,但正如您所提到的,实现功能需要花费金钱,这个特定功能并非微不足道,而且好处也不清楚。

关于c# - 为什么 lambda 可以转换为表达式而方法组不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15866044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com