【问题标题】:How to watch (i.e. debug) extra-lambda variable inside lambda scope in C#/Visual-Studio/Unity3d?如何在 C#/Visual-Studio/Unity3d 的 lambda 范围内观察(即调试)额外的 lambda 变量?
【发布时间】:2017-03-01 21:52:04
【问题描述】:

在将 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 函数正在使用它。

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

【问题讨论】:

  • 也许您应该多发布一些代码。

标签: c# unity3d lambda visual-studio-2015 mono


【解决方案1】:

原来这是C# lambda call in for loop references to last object的变体

使用协程和 lambda 表达式的 Mono/Unity 存在问题;

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

http://answers.unity3d.com/questions/974036/c-lambda-call-in-for-loop-references-to-last-objec.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-15
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多