这个代码块怎么通俗的来讲解

int someVal = 5;
Func f = x => x + someVal;
someVal = 7;
Console.WriteLine(f(3));
是不是应该这样说
声明一个匿名 的委托方法 f ,输入一个int 参数,然后输出一个int 值
f(3) 就是说输入一个 整形参数为3

 class Program
{
void main()
{
int someVal = 5;
Func<int, int> f = x => x + someVal;
someVal = 7;
Console.WriteLine(f(3));
}
}
编译器会生成如下代码
class ClosureContext
{
int someVal;
public ClosureContext(int someval) { someVal = someval; }
public int f(int x)
{
return x + someVal;
}
}
class Program
{
void main()
{
int someVal = 5;
someVal = 7;
Console.WriteLine(new ClosureContext(someVal).f(3));
}
}

Func f = x => x + someVal; 这个相当于一个函数。和函数不同的是,它使用了闭包变量someVal。
f(3) 就是说输入一个 整形参数为3 你说的是对的。

只不过 ClosureContext 这个名字编译器会用一个特殊符号开头的名字命名,使得不至于和你的代码冲突。但是原理大致如此。