我正在运行Visual Studio 2015 Enterprise,.NET 4.6,并且我编写了一些依赖于Delegates静态的代码。我从this问题运行了确切的代码,但我得到了“假”:
static void Main(string[] args)
{
Action<string> actionMethod = s => { Console.WriteLine("My Name is " + s); };
// Always false
Console.WriteLine(actionMethod.Method.IsStatic);
Console.Read();
}
这是一个错误吗?或者C#不能保证没有非本地依赖关系的lambda会变成静态的吗?
是否有解决方法来确定lambda / delegate是否具有非本地依赖关系?我的目标是知道lambda是否捕获了它的封闭变量/使用闭包。
答案 0 :(得分:2)
或者C#不能保证没有非本地依赖关系的lambda会变成静态吗?
没有这样的保证。这是编译器的某些版本的实现细节;一个人没有义务继续前进。如您所见,他们已经改变了实现细节。