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