【发布时间】:2019-01-25 15:19:49
【问题描述】:
我列出了 2 个这样的类:
class Item1
{
}
class Item2
{
public Item1 item;
public Item2(Item1 it){
item = it;
}
}
然后我有一个包含 Item1 的列表:
List<Item1> item1list;
还有另一个包含 Item2 的列表:
List<Item2> item2list;
我的清单是这样的:
var it = new Item1();
item1list.Add(it);
item2list.Add(new Item2(it));
现在,我只想从 item1list 中删除一个元素,并在 item2list 中丢失了引用(获取 null),如下所示:
item1list.Remove(it); // item1list lost the element
item2list.Select(i => (search query)) // Gives a null result
现在 item2list 保存了我的 Item1 对象的副本。
【问题讨论】:
-
你还有
it的引用,所以应该可以找到一个项目:item2list.RemoveAll(i => i.Item1 == it)(credits)。 -
@Sinatr 还有其他可能性吗?我想避免这种情况
-
确保你没有改变值:item = it
-
I want to lost the reference in the second list after removing from first list.默认情况下 C# 或 LINQ 不支持。您需要编写自己的逻辑以保持列表同步。 Sinatr 建议的item2list.RemoveAll是其中一种方法。 -
您的第二个列表 (
List<Item2>) 与您的第一个列表 (List<Item1>) 的类型不同。它包含不同的对象(您的第一个列表中的it是new Item1(),而第二个列表中的项目是new Item2(it))。我不确定在没有大量代码的情况下如何使它们保持同步。仅仅因为在第一个列表中不再引用it引用的对象并不意味着该对象不存在。只要有对该对象的引用(并且您的第二项(Item2实例)引用它),该对象就会挂起而不被收集