我发现以下内容相当奇怪.然后,我主要使用动态语言中的闭包,这对于同一个"bug"应该是不可怀疑的.以下使编译器不满意:
VoidFunction t = delegate { int i = 0; }; int i = 1;
它说:
名为"i"的局部变量不能在此范围内声明,因为它会给"i"赋予不同的含义,"i"已在"子"范围内用于表示其他内容
所以这基本上意味着在委托中声明的变量将具有声明的函数的范围.不完全是我所期望的.我甚至没有尝试过调用这个函数.至少Common Lisp有一个功能,你可以说变量应该有一个动态名称,如果你真的希望它是本地的.这在创建不泄漏的宏时尤其重要,但这样的东西也会有所帮助.
所以我想知道其他人如何解决这个问题呢?
为了澄清我正在寻找一个解决方案,其中我在delegete中声明的变量不会干扰委托后声明的变量.我仍然希望能够捕获委托之前声明的变量.
它必须是允许匿名方法(和lambdas)使用包含方法中的局部变量和参数的方式.
解决方法是为变量使用不同的名称,或者创建一个普通的方法.