繁体   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