我在两台不同的机器上运行以下程序:
static class Program
{
static void Main(string[] args)
{
Func<int> lambda = () => 5;
Console.WriteLine(lambda.GetMethodInfo().IsStatic);
Console.ReadLine();
}
}
在一台计算机上,带有.NET 4.5和Visual Studio 2012在另一台计算机上安装了此版本的" True",其中包括.NET Framework 4.6.2和Visual Studio 2015,它打印了" false"。
我认为匿名方法是在静态上下文中定义的。在最后一个框架更新中,是否(以记录的方式)进行了更改?
我需要做的是在 lambda.GetMethodInfo()
上使用 Expression.Call
,在非静态情况下,这需要一个定义lambda的实例。如果我想使用lambda.GetMethodInfo().Invoke
,我会面临同样的问题。
如何获得这样的实例?
请记住,此(lambdas)是一项编译器功能,因此运行时框架版本不会有所作为。另外,因为这是一项编译器功能,因此2012年至2015年之间存在差异并不令人惊讶(当引入罗斯林(Roslyn)取代了大多数现有的编译器基础架构时)。
)。我不能说明为什么在这里特别改变它的充分理由(尽管我知道已经进行了一些更改以在更多的情况下进行编辑和计算),但是它从未有过合同/em>关于如何实施兰伯。
如何获得这样的实例?
好吧, lambda
是一个 Delegate
,它总是暴露出一个 Target
属性,该属性在委托如此绑定时引用实例。
如何获得这样的实例
我不确定这是否重要吗?当然,您可以通过仅执行此操作(例如)
来运行lambda功能 Console.Print(lambda());
因此,它是静态与否的事实。