【发布时间】:2012-02-23 23:59:03
【问题描述】:
.NET 2.0 或 4.0 编译器为匿名方法生成的代码与 .NET 4.0 编译器为等效 lambda 生成的代码中生成的引用有什么不同吗?特别是对于 this 指针:我知道匿名方法和 lambda 都是 C# 编译器功能,编译器实际上会生成一个嵌套类,其中包含一个委托和外部变量所需的所有引用,但 this article 是关于匿名方法的实现声明一个对指针的引用,我找不到任何描述 lambdas 类似内容的来源。或者我没有找到任何东西,因为编译匿名方法的实现将 1 对 1 映射到 lambdas 的实现?
这里有一段代码来演示匿名方法和 lambda:
class AnonymousMethodMethodScope
{
private Func<bool> d;
public Func<int, bool> d2;
int j = 0;
public void Test(int i)
{
d = new Func<bool>(delegate { j = 10; return j > i; });
// what references does this anonymous method keep?
d2 = new Func<int, bool>(delegate(int x) { return x == j; });
Console.WriteLine("j = " + j + " result = " + d());
}
}
class LambdaMethodScope
{
private Func<bool> d;
public Func<int, bool> d2;
public void Test(int i)
{
int j = 0;
d = () => { j = 10; return j > i; };
// what references does this lambda keep?
d2 = x => x == j;
Console.WriteLine("j = " + j + " result = " + d());
}
}
【问题讨论】:
标签: c# lambda anonymous-methods