C# 中 List 引用导致数据修改问题及解决方案
"有以下c#代码\n var fd1 = new List\u003cCommonFilterModel\u003e();\n fd1.Add(new CommonFilterModel("1", "=", "1"));\n fd1.Add(new CommonFilterModel("2", "=", "2"));\n fd1.Add(new CommonFilterModel("3", "=", "3"));\n \n var fd2 = fd1.Where(d => d.Name == "1").ToList();\n foreach (var item in fd2)\n {\n if (item.Name == "1")\n {\n item.Name = "a"; \n }\n }\n \n 我改了fd2中的name 但是fd1中的数据 也跟着变化了 ."\n \n 这是因为fd1和fd2实际上指向同一个对象的引用,它们引用的是同一块内存地址。所以当你修改fd2中的元素时,实际上也在修改fd1中的相应元素。\n \n 要避免这种情况,你可以使用Clone方法或者创建一个新的List来存储fd2的副本,而不是直接引用fd1。这样修改fd2中的元素就不会影响fd1中的数据。\n \n 以下是示例代码:\n \n csharp\n var fd1 = new List\u003cCommonFilterModel\u003e\(\);\n fd1.Add\(new CommonFilterModel\("1\", \"=\", \"1\"\)\);\n fd1.Add\(new CommonFilterModel\("2\", \"=\", \"2\"\)\);\n fd1.Add\(new CommonFilterModel\("3\", \"=\", \"3\"\)\);\n \n var fd2 = fd1.Where\(d => d.Name == \"1\"\).Select\(d => d.Clone\(\)\).ToList\(\);\n foreach \(var item in fd2\)\n {\n if \(item.Name == \"1\"\)\n {\n item.Name = \"a\"\; \n }\n }\n \n \n 其中,Clone方法是自定义的一个方法,用于复制CommonFilterModel对象的属性值,并返回一个新的对象。这样就可以确保fd1和fd2是独立的,修改其中一个不会影响另一个。
原文地址: https://www.cveoy.top/t/topic/pvhX 著作权归作者所有。请勿转载和采集!