Lists
在 C# 中使用时,我遇到了一些令人困惑的行为。如果我将一个给定类型的集合(我已经用List<T>
和测试过Array
)添加到一个List
(即List<List<int>>
),修改子也将修改它被添加到List
的父的内容。List
但是,如果我将一个不是集合的对象(即 abool
或 an int
)添加到 a List
,则修改对象本身不会修改List
它添加到的内容。我在下面包含了一些示例代码:
List<List<int>> intList = new List<List<int>>();
List<int> ints = new List<int>();
ints.Add(12345);
intList.Add(ints);
Console.WriteLine(intList[0].Count); //intList[0].Count is 1
ints.Clear();
Console.WriteLine(intList[0].Count); //intList[0].Count is 0
似乎在上面的例子中,ints
集合只是简单地“映射”到intList[0]
,所以当你修改ints
集合本身时,你也在修改intList[0]
,因为它们是同一个对象。这与下一个示例形成对比:
List<bool> boolList = new List<bool>();
bool bigBool = false;
boolList.Add(bigBool);
Console.WriteLine(boolList[0]); //boolList[0] is false
bigBool = true;
Console.WriteLine(boolList[0]); //boolList[0] is...still false??
在上面的示例中,似乎不是被映射到boolList[0]
,而是被bigBool
复制到boolList[0]
。boolList[0]
的副本也是如此bigBool
,它们是两个独立的对象。
所以我的问题是:为什么似乎有两个独立的功能List<T>.Add
,这取决于添加到的类型是什么List
?我检查了 MSDN,但我找不到任何关于这种行为的提及。谢谢。