将静态列表分配给非静态列表

时间:2015-03-03 14:31:33

标签: c# list unity3d static instance

我来到这里是因为我对Unity和C#有一个奇怪的问题而我无法解决这个问题。

我有两个C#脚本:

  • ScriptA实例化一次并具有静态变量。它有一个静态列表,其中包含路径的点。此列表随时间变化。

  • ScriptB被多次实例化(它附加到敌人身上)。 在Start()上,设置一个等于当前ScriptA.listOfPoint的非静态列表

问题是这个非静态列表似乎是用ScriptA.listOfPoints更新的。我只想在实例化ScriptB时有一个等于ScriptA.listOfPoints状态的列表。

我在这里做错了什么?

提前致谢:)

静态

//ScriptA    
public static List<int> listOfPoints = new List<int>();
public static void pathUpdate() //get called every 2secs
{
    //listOfPoints is modified
}

敌人:

//ScriptB
private List<int> nonStaticListOfPoints = new List<int>();
void Start ()
{
    nonStaticListOfPoints = ScriptA.listOfPoints;
}

1 个答案:

答案 0 :(得分:6)

当您进行该分配时,您不会创建两个列表,而是两个保持对同一列表的引用的变量。

如果您需要列表元素的副本,可以执行this

nonStaticListOfPoints = new List<int>(ScriptA.listOfPoints);

这将创建一个 new 列表并复制传递给构造函数的列表中的元素,因此nonStaticListOfPoints现在可以独立于listOfPoints进行操作。