如何在C#/visualstudio/Unity3d中查看(即调试)lambda范围内的额外lambda变量?

如何在C#/visualstudio/Unity3d中查看(即调试)lambda范围内的额外lambda变量?,c#,unity3d,lambda,visual-studio-2015,mono,C#,Unity3d,Lambda,Visual Studio 2015,Mono,将Visual Studio Professional 2015与Unity一起使用时,我注意到,当我在lambda表达式的主体中单步执行时,我无法查看在lambda表达式外部声明/分配但在lambda表达式内部读取的变量 private IEnumerator DoTheThing(string filter) { TextureDownload texDl = new TextureDownload(); texDl.OnCompleted +

将Visual Studio Professional 2015与Unity一起使用时,我注意到,当我在lambda表达式的主体中单步执行时,我无法查看在lambda表达式外部声明/分配但在lambda表达式内部读取的变量

    private IEnumerator DoTheThing(string filter)
    {
        TextureDownload texDl = new TextureDownload();
        texDl.OnCompleted += () =>
        {
            _log.Log("Mesh texture " + texDl.GetType() + ":" + texDl.GetHashCode());
            textures.Add(texDl);
        };
        yield break;
    }
我得到了错误

标识符
texDl
不在范围内

显然,该变量在此范围内是可访问的,因为lambda函数正在使用它


是否有任何远程简单/方便的方法来观察这些变量的值?

结果表明,这是

Mono/Unity与协程和lambda表达式之间存在问题

协同程序本身也是一个隐式闭包,它将所有局部变量作为成员变量移动到一个单独的类中。这意味着不可能在生成器方法中创建“真实”局部变量。这就是显式局部变量声明不起作用的原因


请参见

也许您应该发布更多的代码。