簡體   English   中英

如何在 C#/Visual-Studio/Unity3d 中的 lambda 范圍內觀看(即調試)額外的 lambda 變量?

[英]How to watch (i.e. debug) extra-lambda variable inside lambda scope in C#/Visual-Studio/Unity3d?

將 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# lambda 調用的變

Mono/Unity 存在協程和 lambda 表達式的問題;

協程本身也是一個隱式閉包,它將所有局部變量作為成員變量移動到一個單獨的類。 這意味着不可能在生成器方法中創建“真正的”局部變量。 這就是顯式局部變量聲明不起作用的原因。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM