深浅构造函数的工作方式如下。
using System;
namespace StringArrayInitializationTest
{
class Program
{
static void Main(string[] args)
{
string[] lsa = { "one", "two", "three" };
// Shallow copy
MyClass myObj = new MyClass(lsa);
myObj.EditFirst();
Console.WriteLine("First array item in local : " + lsa[0]);
myObj.CheckFirst();
// Deep copy
MyCopyClass mycpyObj = new MyCopyClass(lsa);
mycpyObj.EditFirst();
Console.WriteLine("First array item in local : " + lsa[0]);
mycpyObj.CheckFirst();
}
}
class MyClass
{
private string[] sa = null;
public MyClass(string[] psa)
{
sa = psa;
}
public void CheckFirst()
{
Console.WriteLine("First array item in object : " + sa[0]);
}
public void EditFirst()
{
sa[0] = "zero";
}
}
class MyCopyClass
{
private string[] sa = null;
public MyCopyClass(string[] psa)
{
sa = new string[psa.Length];
for(int i=0; i<psa.Length; i++)
{
sa[i] = psa[i];
}
}
public void CheckFirst()
{
Console.WriteLine("First array item in object : " + sa[0]);
}
public void EditFirst()
{
sa[0] = "one";
}
}
}
但是这里的问题是我可以使用快捷方式获得深入的构造函数。 如下所示,有些语法不正确。
public MyClass(string[] psa)
{
sa = new string[](psa); // Syntax error here
}
在深度复制行为中初始化字符串数组的第二种方法是什么(使用上面的小代码)?
答案 0 :(得分:3)
sa = psa.ToArray();
会做这份工作。这将取值序列并将其复制到另一个数组中。
请注意,这适用于值类型和(不可变的)字符串。如果要复制参考类型,则必须先找到一种复制参考类型的方法:
// assuming a custom "DeepCopyMethod" exists for your type:
sa = psa.Select(DeepCopyMethod).ToArray();