构造函数使用另一个字符串数组初始化C#字符串数组

时间:2018-11-14 10:52:07

标签: c# arrays string constructor

深浅构造函数的工作方式如下。

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
        }

在深度复制行为中初始化字符串数组的第二种方法是什么(使用上面的小代码)?

1 个答案:

答案 0 :(得分:3)

sa = psa.ToArray();

会做这份工作。这将取值序列并将其复制到另一个数组中。


请注意,这适用于值类型和(不可变的)字符串。如果要复制参考类型,则必须先找到一种复制参考类型的方法:

// assuming a custom "DeepCopyMethod" exists for your type:
sa = psa.Select(DeepCopyMethod).ToArray();