我有一个这样的课:
public class myClass { public Listanewlist = new List ; public void addToList(myOtherClass tmp) { anewList.Add(tmp); } }
所以我将"addToList"称为100次,每次都向列表中添加一个唯一的项目.我测试了我的项目以显示在运行"addToList"方法之前,它们是唯一的.我甚至插了一行来测试"tmp",以确保它是我所期待的.
但是,当我这样做时(假设myClass对象被称为tmpClass):
int i = tmpClass.anewList.Count(); for (int j = 0; j我得到了同样的确切项目,这是写入我列表的最后一项.就像我添加时一样,我用我添加的最后一项覆盖了整个列表.
救命?这毫无意义.我也尝试过List.Insert,我总是在最后插入或在索引0处插入.仍然没有骰子.是的,我是双重源我的索引是正确的,当我做我的测试时,我正在索引每个元素.
:)
更新:好的,我试过这个但仍然有同样的问题:
foreach(myOtherClass tmpC in tmpClass.anewList) { Console.WriteLine(tmpC.theStringInMyClass.ToString()); }并且对于100个项目中的每一个,我得到了相同的字符串输出...我确定我做的事情完全是愚蠢的,但我不知道还有什么.我仍然100%确定正确的字符串开始传入.
-Adeena
好的,我试过这个但仍然有同样的问题:
foreach(myOtherClass tmpC in tmpClass.anewList) { Console.WriteLine(tmpC.theStringInMyClass.ToString()); }并且对于100个项目中的每一个,我得到了相同的字符串输出...我确定我做的事情完全是愚蠢的,但我不知道还有什么.我仍然100%确定正确的字符串开始传入.
-Adeena
1> vt100..:给定addToList方法的签名:
public void addToList(myOtherClass tmp) { anewList.Add(tmp); }是否有可能在该方法的使用者中,您实际上并未创建新实例?
你说你正在调用addToList 100次.据推测,这是一个循环.在每次循环迭代中,您将需要创建一个"myOtherClass"的新实例,否则,您将只更新内存中的同一对象.
例如,如果您执行以下操作,则将拥有同一对象的100个副本:
myOtherClass item = new myOtherClass(); for(int i=0; i < 100; i++) { item.Property = i; addToList(item); }但是,如果您的循环如下所示,它将正常工作:
myOtherClass item = null; for(int i=0; i < 100; i++) { item = new myOtherClass(); item.Property = i; addToList(item); }希望有所帮助!