C# 使用数组深度复制类

C# 使用数组深度复制类,c#,arrays,class,deep-copy,C#,Arrays,Class,Deep Copy,这是我所问的关于复制类的问题的附录 上一个问题(复制类而不是引用类型)的基本答案是使用一种方法避免保持两个类之间的链接 在一个只有int值的类上这样做是可行的,但是当我在混合中引入数组时,这种方法就被打破了。请参见脚本: using System.Collections; using System.Collections.Generic; using UnityEngine; public class MyClass { public int[] myNumber; publ

这是我所问的关于复制类的问题的附录

上一个问题(复制类而不是引用类型)的基本答案是使用一种方法避免保持两个类之间的链接

在一个只有int值的类上这样做是可行的,但是当我在混合中引入数组时,这种方法就被打破了。请参见脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyClass
{
    public int[] myNumber;

    public MyClass ShallowCopy()
    {
        return (MyClass)this.MemberwiseClone();
    }
}

public class Test : MonoBehaviour
{
    Dictionary<string, MyClass> myDictionary1 = new Dictionary<string, MyClass>();
    Dictionary<string, MyClass> myDictionary2 = new Dictionary<string, MyClass>();

    void Start()
    {
        myDictionary1.Add("a", new MyClass() { myNumber = new int[] { 1, 1 } });
        myDictionary1.Add("b", new MyClass() { myNumber = new int[] { 2, 2 } });

        myDictionary2["b"] = myDictionary1["a"].ShallowCopy();
        myDictionary2["b"].myNumber[0] = 3;

        Debug.Log(myDictionary1["a"].myNumber[0]); //output 3, I'd want it to still be 1
    }
}
但我不知道如何构造数组的副本。我已经找到了解决这个问题的方法,但我无法根据我的情况调整解决方案


提前谢谢

如果您知道数组将充满int等值类型,或者您有引用类型,并且希望两个数组都引用同一个实例,则可以使用
CopyTo

int[] copyTarget = new int[copyFrom.length];
copyFrom.CopyTo(copyTarget, 0);
如果您的数组中可以/确实有引用类型,并且您不希望新数组引用相同的实例,那么您将不得不在元素之间移动,对每个元素进行成员式克隆:

int[] copyTarget = new int[copyFrom.length];
for(int i = 0; i < copyTarget.Length; i++)
{
    copyTarget[i] = copyFrom[i].MemberwiseClone();
}
int[]copyTarget=new int[copyFrom.length];
for(int i=0;i
如果您知道数组将充满int等值类型,或者您有引用类型,并且希望两个数组引用同一实例,则可以使用
CopyTo

int[] copyTarget = new int[copyFrom.length];
copyFrom.CopyTo(copyTarget, 0);
如果您的数组中可以/确实有引用类型,并且您不希望新数组引用相同的实例,那么您将不得不在元素之间移动,对每个元素进行成员式克隆:

int[] copyTarget = new int[copyFrom.length];
for(int i = 0; i < copyTarget.Length; i++)
{
    copyTarget[i] = copyFrom[i].MemberwiseClone();
}
int[]copyTarget=new int[copyFrom.length];
for(int i=0;i
other.myNumber=myNumber.ToArray()
?谢谢,但不幸的是,它不起作用“它不起作用”是什么意思?我尝试过使用它,但它找不到ToArray方法。我正在使用Visual Studio上的C#for Unity。您需要使用System.Linq添加
到您的using子句
other.myNumber=myNumber.ToArray()
?谢谢,但不幸的是,它不起作用“它不起作用”是什么意思?我尝试过使用它,但它找不到ToArray方法。我正在使用Visual Studio上的C#for Unity。您需要使用System.Linq添加
到您的使用条款我已经测试了两种方法,但都不起作用。谢谢你的回复!你说两种方法都不管用是什么意思?我已经测试了两种方法,两种方法都不管用。谢谢你的回复!你说两份工作都不做是什么意思?