【问题标题】:Constructor initializing C# string array with another string array构造函数用另一个字符串数组初始化 C# 字符串数组
【发布时间】:2018-11-14 10:52:06
【问题描述】:

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

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
        }

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

【问题讨论】:

    标签: c# arrays string constructor


    【解决方案1】:
    sa = psa.ToArray();
    

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


    请注意,这适用于值类型和(不可变)字符串。如果你想要引用类型的深拷贝,你必须先找到一种方法来深拷贝引用类型:

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

    【讨论】:

    • 使用 System.Linq;
    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    相关资源
    最近更新 更多