[英]Anonymous method in static class is non-static? How to invoke it?
我在两台不同的机器上运行以下程序:
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时替换了大多数现有的编译器基础结构)并不奇怪。
我不能给出一个可靠的理由来解释为什么它会在这里被特别改变(虽然我知道已经进行了一些改变以使Edit-and-Continue能够在更多的上下文中工作),但它从来没有关于如何实现lambdas的合同 。
我怎么能得到这样的实例?
好吧, lambda
是一个Delegate
,并且它总是暴露一个Target
属性,该属性在委托绑定时引用一个实例。
我怎样才能得到这样的实例
我不确定这有关系吗? 当然你可以通过简单地运行lambda函数(例如)
Console.Print(lambda());
因此它是静态的事实在很大程度上是无关紧要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.