ホームページ >バックエンド開発 >C#.Net チュートリアル >C# リスト値変更のデモとパラメータとして渡される説明
[TestMethod] public void TestMethod1() { List<int> list = new List<int>(); Test(list); Console.WriteLine(list.Count()); // 总数量变为 1 } private void Test(List<int> list) { list.Add(1); }
Test 後、リスト内の要素の数が 0 から 1 に変化していることがわかります。
変数listが別の変数list2に代入されている場合、list2を操作するとリストも変化します。
これは、これらの変数が実際には別のメモリ ブロックを指しており、要素の数と要素の値を変更すると、対応するメモリ ブロックがすべて変更されるためです。
しかし、ConvertAll メソッドが呼び出されると、返される変数は、前のメモリ ブロックとは異なる別のメモリ ブロックを指します。
[TestMethod] public void TestMethod1() { List<int> list = new List<int>(); Test(list); Console.WriteLine(list.Count()); // 总数量仍为 0 } private void Test(List<int> list) { List<int> list2 = new List<int>(); list2.Add(1); list = list2; }
これは list = list2 で、実際には list2 に対応するメモリ ブロックを指します。前述の結論によれば、パラメーターのリストは TestMethod1 グループではなく list2 と同じです。リスト内の人の数。
次のコードは異なりますが、実際には 2 つの新しい Listbd43222e33876353aff11e13a7dc75f6() が作成され、TestMethod1() の誰もそれを使用しなくなりました。
[TestMethod] public void TestMethod1() { List<int> list = new List<int>(); Test(ref list); Console.WriteLine(list.Count()); // 总数量变为 1 } private void Test(ref List<int> list) { List<int> list2 = new List<int>(); list2.Add(1); list = list2; }
同じことが配列にも当てはまります。
C# リスト値変更のデモと説明関連記事の詳細については、PHP 中国語 Web サイトに注目してください。