我制作了一个List来保存对象,然后我会读它。但即使我给List一个索引,我总是得到相同的对象结果。这是代码:
List<TempIds> treeDIds = new List<TempIds>();
TempIds tempIds = new TempIds();
foreach (ItemGroupTreeD treeD in itemTreeDColl)
{
//Idleri listeye alıyoruz daha sonra karşılaştırma yapmak için
tempIds.TreeDId = treeD.Id;
tempIds.TreeParentId = treeD.TreeParentId;
treeDIds.Insert(treeDIds.Count, tempIds);
//----
//Eğer ilk gelen detay id ile methoda gelen id bir ise collectiona ekliyoruz.
if (tempIds.TreeDId == groupTreeDId)
{
treeDTempColl.Add(treeD);
}
else
{
//Burada karşılaştırma yapıyoruz.
for (int i = 0; i < treeDIds.Count; i++)
{
if (tempIds.TreeParentId == treeDIds[i].TreeDId)
{
treeDTempColl.Add(treeD);
break;
}
}
}
}
例如:
对于第一个循环TreeDId = 3和TreeParentId = 1然后我插入索引0.第二个循环TreeDId = 2,TreeParentId = 1,然后插入索引1.当循环进入List时,我总是得到TreeDId = 2并且TreeParentId = 1,因为最后一个循环是第二个循环。我还能做什么?
谢谢。
答案 0 :(得分:11)
只有一个tempIds对象。列表中的项目是相同的项目,并且其中包含最后一项。
将TempIds tempIds = new TempIds();
移动到循环中
foreach (ItemGroupTreeD treeD in itemTreeDColl)
{
TempIds tempIds = new TempIds();
请记住,列表不包含您添加的数据的副本。它包含对您添加的对象的引用。这样做会创建一个新对象,供您每次插入。
答案 1 :(得分:0)
我认为,您正在循环中修改同一个对象。由于列表只是持有对同一对象的引用,因此您将在所有索引中看到相同的对象。
您需要在foreach块中移动var tempIds =new TempIds();
并可选择使用treeDIds.Add(tempIds);
代替treeDIds.Insert(treeDIds.Count, tempIds);
答案 2 :(得分:0)
您可能不止一次使用相同的object reference
。您的类TempIds
和ItemGroupTreeD
,如果可能,应该成为一个结构,只需添加对象,或者让它们从IClonable
继承,然后添加对象的克隆。
答案 3 :(得分:0)
我认为您需要在foreach循环中重新tempIds
。
答案 4 :(得分:0)
您正在重新插入相同的参考。 Clone()
或者在循环中移动它的创建。