在过去的几天里,我一直在为 friend 编写一些代码。在较高级别上,它解析文本文件并写入 MDB。长话短说,我有几个嵌套的循环对项目进行一些处理。内部循环仅在某些情况下被调用,但当它调用时,它会做一些奇怪的事情。
ArrayList CaseRecordItems = new ArrayList(); // this is created earlier
string baseTif = "sometext_"; // this is created earlier
CaseRecord cr = new CaseRecord(); (this gets populated with "stuff")
char increment = 'A';
for (int i = 0; i < FirstNames.Count; i++)
{
cr.Firstname = (string)FirstNames[i];
cr.Lastname = (string)LastNames[i];
if (FirstNames.Count > 1)
{
cr.Tif = baseTif + increment.ToString();
increment++;
}
CaseRecordItems.Add(cr);
}
例如,循环运行两次,应将 cr.Tif 的值设置为 sometext_A 和 sometext_B。这可以正常工作,但是一旦将第二项添加到集合中,第一项的值就会更改以匹配它。
我怀疑这是由于我不了解这些对象是如何被实例化和传递的。任何见解将不胜感激。
编辑:
根据令人敬畏的反馈(和我的 NumPy ),问题已得到解决。感谢丹的回答,我对使用克隆功能之前尝试过的代码进行了一些更改(是的,海滩我实际上已经尝试过:P)。
新 block 如下所示:
ArrayList CaseRecordItems = new ArrayList();//这是之前创建的
字符串 baseTif = "sometext_";//这是之前创建的
病例记录 cr = 新病例记录();//这将填充“东西”)
字符增量 = 'A';
for (int i = 0; i < FirstNames.Count; i++)
{
CaseRecord cr2 = new CaseRecord();
cr2 = cr.Clone(); // preserves the data from outside
cr2.Firstname = (string)FirstNames[i];
cr2.Lastname = (string)LastNames[i];
if (FirstNames.Count > 1)
{
cr2.Tif = baseTif + increment.ToString();
increment++;
}
CaseRecordItems.Add(cr2);
}
感谢大家的超快速回复!
请您参考如下方法:
我假设 cr 是一个对象。您不是每次都创建一个新的 cr,因此您在 arraylist 中有两次相同的引用,因此当您第二次修改它时,您实际上是在处理同一个对象。
