委托中变量的范围

And*_*sen 8 c# lambda delegates scope functional-programming

我发现以下内容相当奇怪.然后,我主要使用动态语言中的闭包,这对于同一个"bug"应该是不可怀疑的.以下使编译器不满意:

VoidFunction t = delegate { int i = 0; };

int i = 1;
Run Code Online (Sandbox Code Playgroud)

它说:

名为"i"的局部变量不能在此范围内声明,因为它会给"i"赋予不同的含义,"i"已在"子"范围内用于表示其他内容

所以这基本上意味着在委托中声明的变量将具有声明的函数的范围.不完全是我所期望的.我甚至没有尝试过调用这个函数.至少Common Lisp有一个功能,你可以说变量应该有一个动态名称,如果你真的希望它是本地的.这在创建不泄漏的宏时尤其重要,但这样的东西也会有所帮助.

所以我想知道其他人如何解决这个问题呢?

为了澄清我正在寻找一个解决方案,其中我在delegete中声明的变量不会干扰委托声明的变量.我仍然希望能够捕获委托之前声明的变量.

Arj*_*nbu 9

它必须是允许匿名方法(和lambdas)使用包含方法中的局部变量和参数的方式.

解决方法是为变量使用不同的名称,或者创建一个普通的方法.

  • 委托不具有独立的范围,而不是if或foreach代码块.详情请见我的回答. (3认同)