【发布时间】:2012-07-27 03:44:12
【问题描述】:
也许我错过了一些微不足道的东西。我有几个List<T>s,我需要他们的一个大列表,它是所有其他列表的联合。但我确实希望他们在那个大列表中的引用,而不仅仅是值/副本(不像我通常在 SO 上找到的许多问题)。
例如我有这个,
List<string> list1 = new List<string> { "a", "b", "c" };
List<string> list2 = new List<string> { "1", "2", "3" };
var unionList = GetThatList(list1, list2);
假设我在unionList 中得到了我想要的列表,那么这应该会发生:
unionList.Remove("a"); => list1.Remove("a");
unionList.Remove("1"); => list2.Remove("1");
//in other words
//
//unionList.Count = 4;
//list1.Count = 2;
//list2.Count = 2;
为了清楚起见,这通常发生在
unionList = list1; //got the reference copy.
但是我该如何处理第二个列表,list2 添加到unionList?
我尝试了Add 和AddRange,但它们显然是克隆而不是复制。
unionList = list1;
unionList.AddRange(list2); //-- error, clones, not copies here.
和
foreach (var item in list2)
{
unionList.Add(item); //-- error, clones, not copies here.
}
更新:我想我在问一些毫无意义的问题,并且在语言中本质上是不可能的......
【问题讨论】:
-
据我所知,“开箱即用”是不可能的。要么您创建自己的集合类型来包装其他集合(但这似乎不必要地复杂),或者您更可能想要重新考虑您的程序。
-
@KooKiz 是的,我明白了。我当然可以没有它,但我在想一种可能性..
-
它似乎不适用于您的情况,但请记住,这取决于您创建列表的数据类型。如果它是 List(of T as Class) 那么默认情况下它将复制引用而不是克隆对象。我认为只有在使用原始类型(或可能的结构)时才会遇到您所描述的问题。
标签: c# .net copy clone generic-list