簡體   English   中英

如何從 lambda 內部修改 ref 變量

[英]How to modify a ref variable from inside a lambda

我想從 lambda 內部分配給一個 ref 變量。這是我所擁有的簡化 MRE:

public class Foo
{
    public int Value { get; private set; }
    public Foo(int value) => this.Value = value;
}

public class Test
{
    Foo F1 = new Foo(1);
    Foo F2 = new Foo(2);

    // library method, cannot change
    void LoadAsync(int value, Action<Foo> onSuccess)
    {
        // this happens async on a future frame
        Foo f = new Foo(value);
        onSuccess(f);
    }

    // my method, can change parameters and body, cannot change return type
    void LoadAndAssignAsync(int value, ref Foo fooToAssign)
    {
        LoadAsync(value, loadedFoo => fooToAssign = loadedFoo); // this is not allowed

        // because the load happens async, I cannot assign `fooToAssign` here,
        // it needs to happen inside the lambda
    }

    void Start()
    {
        LoadAndAssignAsync(11, ref F1); // I want to keep this simple
        LoadAndAssignAsync(24, ref F2);

       // I want a simple way of saying:
       // load and when done assign the result to the variable (field) I specify
    }
}

由於此處顯示的原因,lambda 無法捕獲引用變量。 我正在尋找一種簡單的替代方法(如果存在)。

我可以更改並傳遞 lambda 而不是LoadAndAssign(11, result => F1 = result ,但這很麻煩,我希望我可以保留簡單的ref F1參數。


這里的異步意味着 Unity 的“異步”,又名協程,更具體地說是 Addressables 的AsyncOperationHandle

你可以寫這樣的代碼:

void LoadAndAssignAsync(int value, ref Foo fooToAssign)
{
    Foo aa = null;
    LoadAsync(value, loadedFoo => aa = loadedFoo); // this is not allowed
    fooToAssign = aa;

暫無
暫無

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

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