kdm*_*ray 1 c# collections loops for-loop
我有一些代码,我过去几天一直在为朋友工作.在较高级别,它解析文本文件并写入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);
}
Run Code Online (Sandbox Code Playgroud)
该循环运行两次,并应将cr.Tif的值设置为sometext_A和sometext_B.这可以正常工作,但是一旦将第二个项目添加到集合中,第一个项目的值就会更改为与之匹配.
我怀疑这是由于我不了解这些对象如何被实例化和传递.任何见解将不胜感激.
编辑:
基于令人敬畏的反馈(和我的麻木 - 坚果),问题已得到解决.感谢Dan的回答,我在使用克隆功能之前对我尝试过的代码进行了一些更改(是的,我实际尝试过的海滩:P).
新块看起来像这样:ArrayList CaseRecordItems = new ArrayList(); //这是先前创建的字符串baseTif ="sometext_"; //这是先前创建的CaseRecord cr = new CaseRecord(); //这会填充"stuff")char increment ='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);
}
Run Code Online (Sandbox Code Playgroud)
感谢大家的超快响应!