gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:49:09 26 4
gpt4 key购买 nike

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

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,它取代了大部分现有的编译器基础结构)。

我无法给出明确的理由来说明为什么它会在这里被特别更改(尽管我知道为了启用“编辑并继续”以在更多上下文中工作而进行了一些更改),但它从来都不是契约(Contract) 关于 lambda 是如何实现的。

How can I get such an instance?

嗯,lambda 是一个 Delegate ,并且它总是公开一个 Target 属性,当委托(delegate)如此绑定(bind)时它引用一个实例。

关于c# - 静态类中的匿名方法是非静态的?如何调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42390336/

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