由于某些原因,我似乎找不出我做错了什么。我尝试了一些东西,每次原始记录都会被修改。
我有一个特定类的列表。我正在迭代列表,如果满足特定条件,我需要为此迭代创建一个重复项,修改两个值,然后将其添加到最终列表中。除了每次我修改我创建的副本时,这些值都会在原始副本中修改。数据是设置为列表的绑定列表。
// MyClasses is a BindingList<MyClass>
List<MyClass> classesToSave = new List<MyClass>();
foreach (var class in MyClasses)
{
classesToSave(class);
if (class.NeedsDupe)
{
MyClass dupeClass = new MyClass();
dupeClass = class;
dupeClass.NeedsDupe = false;
dupeClass.IsDupe = true;
classesToSave(dupeClass);
}
}
假设通过第一次迭代,MyClasses中的第一项具有class.NeedsDupe == true和class.IsDupe == false。如果在满足条件之前将类添加到classesToSave,则classesToSave中的唯一条目是原始类(class.NeedsDupe == true和class.IsDupe == false)。但是,当满足条件并修改dupeClass对象时,在将dupeClass添加到classesToSave之前,会修改classesToSave中的原始条目(也是唯一的条目)。
我是不是完全漏掉了什么?我有一种感觉,我正在画一个脑筋急转弯,也许需要一个旧物体的参考?或者我以某种方式复制了BindingList的属性,并且当我更改我认为是新对象的dupeClass对象时,实际上是导致更改返回到原来的对象?
谢谢你的帮助。
发布于 2013-01-11 14:48:21
这就是类的本质,它们是引用类型。为MyClass创建复制构造函数
class MyClass
{
public MyClass(MyClass myClass)
{
//Assign the properties here
//this.x = myClass.x;
//....
//....
}
}
然后你调用
MyClass dupeClass = new MyClass(@class);
发布于 2013-01-11 14:26:47
以下几行是有问题的。dupeclass引用这个类;它们指向同一个对象。将dupeClass
的属性设置为与class
的属性相等,而不是使它们相等。
MyClass dupeClass = new MyClass();
dupeClass = class;
发布于 2013-01-11 14:27:41
在此行中,您将创建一个新的MyClass实例:
MyClass dupeClass = new MyClass();
但随后您会立即用原始文件覆盖它:
dupeClass = class;
从那时起,dupeClass
和class
都引用了同一个对象,因此对dupeClass
的更改也会对class
进行更改。
https://stackoverflow.com/questions/14280107
复制