【问题标题】:assign custom list by value memory allocation in c# list object assignment issue在 c# 列表对象分配问题中按值内存分配分配自定义列表
【发布时间】:2012-07-19 14:39:15
【问题描述】:
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 中,并且我的循环给出错误消息。

【问题讨论】:

  • 在问题中发布代码时请使用code formatting。您已经给objTempList 提供了对objParentList 的引用,父列表得到的任何东西,临时列表也会得到。你得到的具体错误是什么?知道会很有用...

标签: c# list linq object


【解决方案1】:

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

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

objTempList = new List<T>(objParentList);

【讨论】:

    【解决方案2】:

    你应该分开列表实例以避免这个错误

    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);       
    }  
    

    【讨论】:

    • 错误是在迭代集合时修改集合是无效操作。由于 objTempList 和 objParentList 是问题代码中的同一个对象,因此在迭代时无法将对象添加到 objParentList。
    • InvalidOperationException。在原始版本中,objTempList 被修改,因为它与 objParentList 引用相同。
    • 是的,它的引用相同,但是如何在没有引用的情况下分配两个列表对象
    • 我没有在任何地方使用关键字 ref 那么为什么它引用父实例
    • 您是否希望在枚举完成后 objParentList 中的更改反映在 objTempList 中?
    猜你喜欢
    • 1970-01-01
    • 2021-08-19
    • 2016-12-06
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    相关资源
    最近更新 更多