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

C# 将静态列表分配给非静态列表,c#,list,unity3d,static,instance,C#,List,Unity3d,Static,Instance,我来这里是因为我对统一和C#有一个奇怪的问题,我不知道如何解决这个问题 我有两个C#脚本: ScriptA被实例化一次,并且具有静态变量。它有一个静态列表,其中包含路径的点。此列表随时间而变化 ScriptB被实例化多次(它连接到敌人)。 在Start()上,它设置一个与当前ScriptA.listOfPoint相等的非静态列表 问题是这个非静态列表似乎是用ScriptA.listOfPoints更新的。我只想有一个列表,当这个脚本被实例化时,它等于ScriptA.listOfPointss

我来这里是因为我对统一和C#有一个奇怪的问题,我不知道如何解决这个问题

我有两个C#脚本:

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

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

问题是这个非静态列表似乎是用
ScriptA.listOfPoints
更新的。我只想有一个列表,当这个脚本被实例化时,它等于
ScriptA.listOfPoints
state

我做错了什么

提前感谢:)

静态:

//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;
}
//ScriptA
公共静态列表listOfPoints=新列表();
public static void path update()//每2秒调用一次
{
//修改了点列表
}
敌人:

//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;
}
//ScriptB
私有列表非静态ListofPoints=新列表();
无效开始()
{
非静态listOfPoints=ScriptA.listOfPoints;
}

当您进行分配时,您不是在创建两个列表,而是在创建两个变量,其中包含对同一列表的引用

如果需要列表元素的副本,可以执行以下操作:

nonStaticListOfPoints=新列表(ScriptA.listOfPoints);

这将创建一个新列表,并将列表中的元素复制到构造函数中,因此
非静态listOfPoints
现在可以独立于
listOfPoints

进行赋值时,您不是创建两个列表,而是创建两个包含对同一列表引用的变量

如果需要列表元素的副本,可以执行以下操作:

nonStaticListOfPoints=新列表(ScriptA.listOfPoints);

这将创建一个新列表,并将列表中的元素复制到构造函数中,因此
非静态listOfPoints
现在可以独立于
listOfPoints

进行操作,您需要复制源列表的内容:
非静态listOfPoints.AddRandge(ScriptA.listOfPoints)指定引用。因此
nonStaticListOfPoints
引用的结构与
listOfPoint
引用的结构完全相同。如果要复制这些值,需要执行类似于
非静态ListofPoints.AddRange(listOfPoint)
的操作。是否使用Unity游戏引擎?有一个unity3标记用于它。您需要复制源列表的内容:
nonStaticListOfPoints.AddRandge(ScriptA.listOfPoints)指定引用。因此
nonStaticListOfPoints
引用的结构与
listOfPoint
引用的结构完全相同。如果要复制这些值,需要执行类似于
非静态ListofPoints.AddRange(listOfPoint)
的操作。是否使用Unity游戏引擎?有一个unity3标记是为它准备的。但这实际上是克隆吗?这是浅层克隆-列表中的元素与第一个列表中的元素是相同的对象。@golergka不在
列表中
它们不是。不管怎样,它实际上并不是克隆列表本身,而是迭代地复制其元素中的引用/值。当然,你是绝对正确的-我一定错过了这一部分。事实上,对于每种C值类型都是如此,无论是基元类型还是
struct
。感谢您的更正。这是真的克隆吗?这是浅层克隆-列表中的元素与第一个列表中的对象相同。@golergka不在
列表中,它们不是。不管怎样,它实际上并不是克隆列表本身,而是迭代地复制其元素中的引用/值。当然,你是绝对正确的-我一定错过了这一部分。事实上,对于每种C值类型都是如此,无论是基元类型还是
struct
。谢谢你的更正。