Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过复制列表中的反射设置特性将更新原始列表_C#_.net_Reflection_Properties_Setvalue - Fatal编程技术网

C# 通过复制列表中的反射设置特性将更新原始列表

C# 通过复制列表中的反射设置特性将更新原始列表,c#,.net,reflection,properties,setvalue,C#,.net,Reflection,Properties,Setvalue,我在我的C代码中遇到了一个问题,我确信这与我使用反射的方式有关,但我不确定如何修复它 据我所知,如果我有: List1 = List<MyClass> 当我运行此命令时,List1[0]和List2[0]都会更新为再见,但我认为List1不会受到我对List2所做更改的影响 我在这里做错了什么或不理解什么?新列表其他列表不做深度复制。当您在[0]处修改项目时,它正在修改两个列表中都存在的原始对象 新列表其他不做深度复制。当您在[0]处修改项目时,它正在修改两个列表中都存在的原始对象

我在我的C代码中遇到了一个问题,我确信这与我使用反射的方式有关,但我不确定如何修复它

据我所知,如果我有:

List1 = List<MyClass>
当我运行此命令时,List1[0]和List2[0]都会更新为再见,但我认为List1不会受到我对List2所做更改的影响


我在这里做错了什么或不理解什么?

新列表其他列表不做深度复制。当您在[0]处修改项目时,它正在修改两个列表中都存在的原始对象


新列表其他不做深度复制。当您在[0]处修改项目时,它正在修改两个列表中都存在的原始对象


复制列表意味着列表是不同的对象。列表中包含的元素仍然相同。例如:

List1 = new List<Fake>() {new Fake { MyVal = "hello" } };
List2 = new List<Fake>(List1);

List2.Add(new Fake { MyVal = "hey" });
Console.WriteLine(List1.Length); // 1
Console.WriteLine(List2.Length); // 2

List2[0].MyVal = "hi";
Console.WriteLine(List1[0].MyVal) // hi

复制列表意味着列表是不同的对象。列表中包含的元素仍然相同。例如:

List1 = new List<Fake>() {new Fake { MyVal = "hello" } };
List2 = new List<Fake>(List1);

List2.Add(new Fake { MyVal = "hey" });
Console.WriteLine(List1.Length); // 1
Console.WriteLine(List2.Length); // 2

List2[0].MyVal = "hi";
Console.WriteLine(List1[0].MyVal) // hi

谢谢这很糟糕,但很有道理:谢谢这很糟糕,但有道理:非常感谢。这很糟糕,但有道理!非常感谢。这很糟糕,但有道理!
List1 = new List<Fake>() {new Fake { MyVal = "hello" } };
List2 = new List<Fake>(List1);

List2.Add(new Fake { MyVal = "hey" });
Console.WriteLine(List1.Length); // 1
Console.WriteLine(List2.Length); // 2

List2[0].MyVal = "hi";
Console.WriteLine(List1[0].MyVal) // hi