List.Add似乎是重复条目.怎么了?

ade*_*ena 3 c# list

我有一个这样的课:

public class myClass
{
  public List<myOtherClass> anewlist = new List<myOtherClass>;

  public void addToList(myOtherClass tmp)
  {
    anewList.Add(tmp);
  }

}
Run Code Online (Sandbox Code Playgroud)

所以我将"addToList"称为100次,每次都向列表中添加一个唯一的项目.我测试了我的项目以显示在运行"addToList"方法之前,它们是唯一的.我甚至插了一行来测试"tmp",以确保它是我所期待的.

但是,当我这样做时(假设myClass对象被称为tmpClass):

int i = tmpClass.anewList.Count();
for (int j = 0; j<i; j++)
{
   //write out each member of the list based on index j...
}
Run Code Online (Sandbox Code Playgroud)

我得到了同样的确切项目,这是写入我列表的最后一项.就像我添加时一样,我用我添加的最后一项覆盖了整个列表.

救命?这毫无意义.我也尝试过List.Insert,我总是在最后插入或在索引0处插入.仍然没有骰子.是的,我是双重源我的索引是正确的,当我做我的测试时,我正在索引每个元素.

:)

更新:好的,我试过这个但仍然有同样的问题:

foreach(myOtherClass tmpC in tmpClass.anewList)
{    
    Console.WriteLine(tmpC.theStringInMyClass.ToString());
}
Run Code Online (Sandbox Code Playgroud)

并且对于100个项目中的每一个,我得到了相同的字符串输出...我确定我做的事情完全是愚蠢的,但我不知道还有什么.我仍然100%确定正确的字符串开始传入.

-Adeena


好的,我试过这个但仍然有同样的问题:

foreach(myOtherClass tmpC in tmpClass.anewList)
{
    Console.WriteLine(tmpC.theStringInMyClass.ToString());
}
Run Code Online (Sandbox Code Playgroud)

并且对于100个项目中的每一个,我得到了相同的字符串输出...我确定我做的事情完全是愚蠢的,但我不知道还有什么.我仍然100%确定正确的字符串开始传入.

-Adeena

vt1*_*100 14

给定addToList方法的签名:

public void addToList(myOtherClass tmp)
  {
    anewList.Add(tmp);
  }
Run Code Online (Sandbox Code Playgroud)

是否有可能在该方法的使用者中,您实际上并未创建新实例?

你说你正在调用addToList 100次.据推测,这是一个循环.在每次循环迭代中,您将需要创建一个"myOtherClass"的新实例,否则,您将只更新内存中的同一对象.

例如,如果您执行以下操作,则将拥有同一对象的100个副本:

myOtherClass item = new myOtherClass();

for(int i=0; i < 100; i++)
{
  item.Property = i;
  addToList(item);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您的循环如下所示,它将正常工作:

myOtherClass item = null;
for(int i=0; i < 100; i++)
{
  item = new myOtherClass();
  item.Property = i;
  addToList(item);
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!