首页 > 解决方案 > 为什么此示例中的每个列表都进行了修改?

问题描述

例如,我想用整数列表初始化我的类: {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();

        }

标签: c#listclassconsole-application

解决方案


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

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

推荐阅读