在c#list object assignment issue中按值内存分配分配自定义列表

时间:2012-07-19 14:39:16

标签: c# list object tolist

objTempList = objParentList;
foreach (var item in objTempList)
{
    objChildList = objList.AsQueryable()
                          .Where(x => x._parentId == item.filedbid)
                          .ToList<FileObjectView>();
    if (objChildList != null)
    {
        foreach (var child in objChildList)
        {
            objParentList.Add(child);
        }
    }
}

以上是我的代码,问题是objTempList = objParentList

的分配

objParentList有10行分配给objTempList 现在我正在进行下一步foreach并在objParentList中添加更多行,其自动反映在列表objTempList中,我的循环正在给出错误消息。

2 个答案:

答案 0 :(得分:0)

如果要将objParentList的内容分配给objTempList而不会无意中修改foreach循环中的objTempList,则需要创建objParentList的新实例并将其分配给objTempList

这样,将列表项添加到循环内部的父列表中不会引发异常,因为您已将原始副本分配给objTempList而不是引用。例如:

objTempList = new List<T>(objParentList);

答案 1 :(得分:-1)

您应该将列表实例分开以避免此错误

objTempList = objParentList.ToList();
foreach (var item in objTempList) 
{ 
   objChildList = objList.AsQueryable().Where(x => x._parentId == item.filedbid).ToList(); 
   foreach (var child in objChildList)
      objParentList.Add(child);       
}