簡體   English   中英

字段“動作”無需賦值即可獲得價值

[英]Field “actions” gets value without assignment

我有 2 個類: ActionsFromQuestsController、ActionsComposer

ActionsFromQuestsController 生成Action類型的數據並將其保存到字段操作

ActionsComposeractionsState、actions字段

actionsState 從 ActionsFromQuestsController 獲取新值並檢查它是否與操作字段不同

如果為真,則用新值填充動作,如果不是,則獲取動作值以防止重載

private void Update() { actionsState.AddRange(actionsFromQuestsController.Actions); if (actionsState.Except(actions).Any()) { Debug.Log("Composing actions"); ComposeActions(); } else { actionsState = actions; } Debug.Log(actionsState.Count); Debug.Log(actions.Count); } private void ComposeActions() { actions.AddRange(actionsFromQuestsController.Actions); WriteActionsToConfig(actions); }

但不知何故,我的操作字段在沒有評估 ComposeActions 方法的情況下獲得了最新操作。 並且代碼中沒有其他賦值

所有字段的類型均為List<Action>

盡管您沒有顯示ActionsComposer構造函數的代碼,但我懷疑正在使用類似代碼初始化actions ,例如:

private List<Action> actions;
private ActionsFromQuestsController actionsFromQuestsController;

public ActionsComposer(ActionsFromQuestsController actionsFromQuestsController)
{
    this.actionsFromQuestsController = actionsFromQuestsController;
    this.actions = actionsFromQuestsController.Actions;
}

通過直接從actionsFromQuestsController.Actions初始化actions ,您實際上是在設置對actionsFromQuestsController.Actions的引用,這將反映對每個List的任何更改。

這可以通過使用List的新實例初始化actions來解決,例如:

private List<Action> actions;
private ActionsFromQuestsController actionsFromQuestsController;

public ActionsComposer(ActionsFromQuestsController actionsFromQuestsController)
{
    this.actionsFromQuestsController = actionsFromQuestsController;
    this.actions = new List<Action>(actionsFromQuestsController.Actions);
}

這將從actionsFromQuestsController.Actions中獲取初始值,但不再是彼此的引用。

暫無
暫無

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

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