如何在 C#/Visual-Studio/Unity3d 的 lambda 范围内观察(即调试)额外的 lambda 变量?
问题描述
在将 Visual Studio Professional 2015 与 Unity 结合使用时,我注意到当我单步执行 lambda 表达式的主体时,我无法看到在 lambda 表达式外部声明/分配但在 lambda 表达式内部读取的变量.
When using Visual Studio Professional 2015 with Unity, I've noticed that when I am stepping though the body of a lambda expression, I cannot watch variables which were declared/assigned outside of but are being read inside of the lambda expression.
我得到了错误
标识符texDl
不在范围内
显然该变量在这个范围内是可访问的,因为 lambda 函数正在使用它.
Obviously the variable is accessible in this scope, because the lambda function is using it.
是否有任何远程简单/方便的方法来观察这些变量的值?
Is there any remotely easy/convenient way to watch the value of such variables?
推荐答案
原来这是 C# lambda 调用 for 循环引用到最后一个对象
使用协程和 lambda 表达式的 Mono/Unity 存在问题;
There is an issue with Mono/Unity with coroutines and lambda expressions;
协程本身也是一个隐式闭包,它将所有局部变量作为成员变量移动到一个单独的类中.这意味着不可能在生成器方法中创建真正的"局部变量.这就是显式局部变量声明不起作用的原因.
The coroutine itself is an implicit closure as well which moves all local variable to a seperate class as member variables. That means it's impossible to create a "real" local variable inside a generator method. That's why the explicit local variable declaration doesn't work.
请参阅 http://answers.unity3d.com/questions/974036/c-lambda-call-in-for-loop-references-to-last-objec.html
这篇关于如何在 C#/Visual-Studio/Unity3d 的 lambda 范围内观察(即调试)额外的 lambda 变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!