Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列表<;T>;()增加问题C#_C#_List - Fatal编程技术网

列表<;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

您再次插入相同的引用。要么克隆()
它,要么将它的创建移动到循环中。

这也是一种可能性,我没有想到这一点