列表<;T>;()增加问题C#
我列了一个清单,把这个物体放在里面,然后我会读它。但是,即使我给列表指定了一个索引,我总是得到相同的对象结果。代码如下:列表<;T>;()增加问题C#,c#,list,C#,List,我列了一个清单,把这个物体放在里面,然后我会读它。但是,即使我给列表指定了一个索引,我总是得到相同的对象结果。代码如下: List<TempIds> treeDIds = new List<TempIds>(); TempIds tempIds = new TempIds(); foreach (ItemGroupTreeD treeD in itemTreeDColl)
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;
}
}
}
}
List treeDIds=new List();
TempIds TempIds=新TempIds();
foreach(ItemGroupTreeD在itemTreeDColl中为treeD)
{
//伊德利·利斯特耶·约鲁兹·达哈·索拉·卡尔马·亚普马克·伊辛
tempIds.TreeDId=treeD.Id;
tempIds.TreeParentId=treeD.TreeParentId;
插入(treeDIds.Count,tempIds);
//----
//Eğer ilk gelen detay id ile methoda gelen id bir ise collectiona ekliyoruz。
if(tempIds.TreeDId==groupTreeDId)
{
treeDTempColl.Add(treeD);
}
其他的
{
//Burada karşşlaştırma yapıyoruz。
for(int i=0;i
例如:
对于第一个循环TreeDId=3和TreeParentId=1,我将它们插入索引0。第二个循环treeId=2,TreeParentId=1,然后将它们插入索引1。当循环进入列表时,我总是得到TreeDId=2和TreeParentId=1,因为最后一个循环是第二个循环。我还能做什么
谢谢。我认为,您正在循环中修改同一对象。由于该列表仅包含对同一对象的引用,因此您将在所有索引中看到同一对象 您需要移动
var tempIds=new tempIds()代码>在foreach块中
并且可以选择使用treeDIds.Add(tempIds)
而不是treeDIds.Insert(treeDIds.Count,tempIds)代码>只有一个tempIds对象。列表中的项是同一项,并且包含最后一项。
移动TempIds TempIds=new TempIds()代码>进入循环
foreach (ItemGroupTreeD treeD in itemTreeDColl)
{
TempIds tempIds = new TempIds();
请记住,列表不包含所添加数据的副本。它包含对已添加对象的引用。这样做可以创建一个新对象供您每次插入。您可能多次使用相同的对象引用。您的类TempIds
和ItemGroupTreeD
,如果可能的话,应该成为一个结构,只需添加对象,或者让它们继承自IClonable
,然后添加对象的克隆。我认为您需要在foreach循环中重新实例化tempIds
。您再次插入相同的引用。要么克隆()
它,要么将它的创建移动到循环中。这也是一种可能性,我没有想到这一点