[英]Field “actions” gets value without assignment
我有 2 个类: ActionsFromQuestsController、ActionsComposer
ActionsFromQuestsController 生成Action类型的数据并将其保存到字段操作
ActionsComposer有actionsState、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.