【发布时间】:2020-07-28 20:27:44
【问题描述】:
这是我询问关于复制课程的previous question 的附录。
上一个问题(复制类而不是引用类型)的基本答案是使用memberwise clone 方法来避免保持两个类之间的链接。
在只有 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
}
}
我尝试过实现 ShallowCopy 方法(在第 9 行实现并在第 25 行使用),但它不起作用。我应该实现一个 DeepCopy 方法,但我不知道如何将其应用于数组。
我的新 DeepCopy 函数类似于
public MyClass DeepCopy()
{
MyClass other = (MyClass)this.MemberwiseClone();
other.myNumber = ?????????????????????? //int[] deep copy
return other;
}
但我不知道如何制定数组的副本。我找到了一个 similar thread 来处理这个问题,但我无法根据我的情况调整解决方案。
提前致谢!
【问题讨论】:
-
other.myNumber = myNumber.ToArray()? -
谢谢,但不幸的是它不起作用
-
“它不起作用”是什么意思?
-
我试过了,找不到ToArray方法。我在 Visual Studio for Unity 上使用 C#。
-
您需要在 using 子句中添加
using System.Linq;