【问题标题】:C# Unity3D initialize List<T> on declaration only initializes two items when there are four?C# Unity3D 在声明时初始化 List<T> 仅在有四个项目时初始化两个项目?
【发布时间】:2018-10-21 20:24:22
【问题描述】:

如下将四个项目初始化为一个List,但是它只初始化了前两个项目……我真的看不出这有什么问题?

public List<SceneStore> lcRecordList = new List<SceneStore>
{
    new SceneStore { description ="Jill ", ID = 1, visited = false },
    new SceneStore { description = "Jack", ID = 2, visited = false},
    new SceneStore { description = "Joe", ID = 3, visited = false},
    new SceneStore { description = "Jenny", ID = 4, visited = false}
};
void NetTest()
{
    NetworkService lcMyNetworkService = new NetworkService();

    lcMyNetworkService.PutJsonList <SceneStore>(lcRecordList, "https://NewSimland.com/~todd/JSON", ReceiveAListOfRecords);
}

截图

这增加了四个项目就好了:

public List<SceneStore> lcRecordList;
void NetTest()
{
    NetworkService lcMyNetworkService = new NetworkService();
    lcRecordList = new List<SceneStore>
    {
        new SceneStore { description ="Jill ", ID = 1, visited = false },
        new SceneStore { description = "Jack", ID = 2, visited = false},
        new SceneStore { description = "Joe", ID = 3, visited = false},
        new SceneStore { description = "Jenny", ID = 4, visited = false}
    };
    lcMyNetworkService.PutJsonList <SceneStore>(lcRecordList, "https://NewSimland.com/~todd/JSON", ReceiveAListOfRecords);
}

那么为什么声明时 lcRecordList 的初始化仅限于前两个?

再拍一张局部变量值的截图:

【问题讨论】:

  • 类是MonoBehaviour吗?如果是,则意味着您在检查器中看到的值将覆盖字段初始化值。
  • OP,你基本上忘记了“.Add”!
  • 在检查器中查看时列表中有多少项?重置单一行为有帮助吗?在检查器中右键单击并单击重置,这将清除序列化字段,因此请注意不要丢失任何重要内容。
  • 啊OKIE DOKIE!!知道了!! Mo Narimanu 和猫!你是对的!!点击 Inspector 上的 Reset 就可以了!

标签: c# list unity3d initialization


【解决方案1】:

正如 CatS 和 Mo Narimani 所指出的,UNITY3D 环境正在根据第一次初始化列表的时间来初始化值,因为它在 MonoBehaviour 中找到了一个公共类属性(又名变量)。在脚本代码中添加更多项目后,这会覆盖脚本中的初始化。

所以答案是通过在添加更多项目后单击检查器中的重置来“刷新”,当更改声明时的初始化时,它有效!

在此处查看屏幕截图:

Unity3D sticks with the first initialization?

【讨论】:

    【解决方案2】:

    试试这个:

       public List<SceneStore> lcRecordList = new List<SceneStore>
        {
          SceneStore store;
          store=  new SceneStore { description ="Jill ", ID = 1, visited = false },
          lcRecordLisr.Add(store);
    
            store=   new SceneStore { description = "Jack", ID = 2, visited = false},
            lcRecordLisr.Add(store);
    
            store=   new SceneStore { description = "Joe", ID = 3, visited = false},
            lcRecordLisr.Add(store);
    
           store=    new SceneStore { description = "Jenny", ID = 4, visited = false}
            lcRecordLisr.Add(store);
    
        };
    

    【讨论】:

    • 如果您愿意,您可以将它们合二为一。
    • 问题是声明初始化实际上初始化了前两项,但有四项。在上面添加了更多详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多