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