Lists
C#で使用しているときに、いくつかの紛らわしい動作に遭遇しました。特定のタイプのコレクション(との両方List<T>
でテスト済み)を(つまり)に追加すると、子を変更すると、それが追加された親のコンテンツも変更されます。ただし、コレクションではないオブジェクト(つまり、または)をに追加した場合、オブジェクト自体を変更しても、追加されたの内容は変更されません。以下にいくつかのサンプルコードを含めました。Array
List
List<List<int>>
List
List
bool
int
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
、そしてそれらは2つの別々のオブジェクトです。
List<T>.Add
だから私の質問は:どのタイプが追加されているかに応じて、なぜの2つの別々の機能があるように見えるのList
ですか?MSDNを確認しましたが、この動作についての言及は見つかりませんでした。ありがとう。