c# - 将静态列表分配给非静态列表

标签 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;
}

最佳答案

当您进行该分配时,您并不是在创建两个列表,而是创建了两个变量,这些变量持有对同一列表的引用。

如果你想要列表元素的副本,你可以做this :

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

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

关于c# - 将静态列表分配给非静态列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28834375/

相关文章:

c# - 决定是使用内部 Parallel.For 还是 Task

c# - 某些 SQL JOINS 是否会使您的 ASP.NET 应用程序非常慢?

c# - web.config : Changing an application setting with C#

c - 从标准输入将整数读入 ADT

c++ - 通过 IL2CPP 的 Unity3d native API 是否可行?

android - Facebook Analytics for Apps 中未跟踪 Android 上的 Unity 游戏 Activity 安装

c# - 如何在 .net core ef 上应用上述关系的 thenInclude 条件?

c# - 将列表绑定(bind)到 gridview C#

Android:如何按日期对 FTPFile[] 文件列表进行排序?

c# - 使用 Unity3d 时 Visual Studio 中的 IntelliSense