我发现以下内容很奇怪。再说一次,我主要使用动态语言中的闭包,这不应该是同一个“错误”。以下内容使编译器不高兴:
VoidFunction t = delegate { int i = 0; };
int i = 1;
它说:
A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
所以这基本上意味着在委托(delegate)中声明的变量将具有在其中声明的函数的范围。这与我所期望的完全不同。我什至没有尝试调用该函数。至少 Common Lisp 有一个特性,你说变量应该有一个动态名称,如果你真的希望它是本地的。这在创建不会泄漏的宏时尤为重要,但类似的东西在这里也会有所帮助。
所以我想知道其他人是如何解决这个问题的?
为了澄清,我正在寻找一种解决方案,其中我在委托(delegate)中声明的变量不会干扰在委托(delegate)之后声明的变量。而且我仍然希望能够捕获在委托(delegate)之前声明的变量。
最佳答案
必须以这种方式允许匿名方法(和 lambda)使用局部变量和包含方法范围内的参数。
解决方法是为变量使用不同的名称,或者创建一个普通方法。
关于c# - 委托(delegate)中变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/404899/