![](/img/trans.png)
[英]How to pass a ref parameter inside lambda expression? - Thread issue
[英]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.