【问题标题】:Field "actions" gets value without assignment字段“操作”无需赋值即可获得价值
【发布时间】:2020-12-08 16:01:06
【问题描述】:

我有 2 个类:ActionsFromQuestsController、ActionsComposer

ActionsFromQuestsController 生成 Action 类型的数据并将其保存到字段 actions

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);
  }

但不知何故,我的 actions 字段在不评估 ComposeActions 方法的情况下获取最新操作。并且代码中没有其他赋值

所有字段都是 List

类型

【问题讨论】:

  • 感觉问题需要对类关系和结构进行一些澄清。

标签: c# json unity3d


【解决方案1】:

虽然您没有显示 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 获取初始值,但不再是彼此的引用。

【讨论】:

  • 是的,初始化确实有效。我怀疑这个问题与类似的事情有关。但不确定。非常感谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多