【问题标题】:Why every list is modificated in this sample? [duplicate]为什么此示例中的每个列表都进行了修改? [复制]
【发布时间】:2021-11-18 01:31:46
【问题描述】:

我想用整数列表初始化我的类,例如: {1,5,6,7,1,0} 然后修改它们并得到两个字段,一个具有相同的整数列表,第二个具有修改后的整数列表。但结果,我得到了两个带有值的修改列表:{0,4,5,6,0,0}。有人可以向我解释为什么这段代码会这样吗?

我的班级

public class MyClass
    {
        public List<int> numbers { get; }
        public List<int> diffrentNum { get; set; }

        public MyClass(List<int> _numbers)
        {
            numbers = _numbers;
            diffrentNum = GetNumbers();
        }

        private List<int> GetNumbers()
        {
            List<int> localNumbers = numbers;

            for (int i=0;i<localNumbers.Count-1;i++)
            {
                if (localNumbers[i] > 0)
                {
                    localNumbers[i]--;
                }
            }

            return localNumbers;
        }
    }

主要

static void Main(string[] args)
        {
            List<int> someDate = new List<int>();
            someDate.Add(1);
            someDate.Add(5);
            someDate.Add(6);
            someDate.Add(7);
            someDate.Add(1);
            someDate.Add(0);
            MyClass myclass= new MyClass(someDate);
            Console.WriteLine(String.Join("", new List<int>(someDate).ConvertAll(i => i.ToString()).ToArray()));
            Console.WriteLine(String.Join("", new List<int>(myclass.numbers).ConvertAll(i => i.ToString()).ToArray()));
            Console.WriteLine(String.Join("", new List<int>(myclass.diffrentNum).ConvertAll(i => i.ToString()).ToArray()));
            Console.ReadKey();

        }

【问题讨论】:

  • 试试List&lt;int&gt; localNumbers = numbers.ToList();,这样你就可以创建一个副本,而不是分配和改变同一个列表。

标签: c# list class console-application


【解决方案1】:

通过调用List&lt;int&gt; localNumbers = numbers;,您将两个变量指定为指向同一个对象,因此通过其中一个所做的任何更改都可以通过另一个看到。 创建列表副本的一种方法是使用 Linq 的 ToList

List<int> localNumbers = numbers.ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多