静态类中的匿名方法是非静态的吗?如何调用它



我在两台不同的机器上运行以下程序:

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());

因此,它是静态与否的事实。

最新更新