ホームページ >バックエンド開発 >C#.Net チュートリアル >C# リスト値変更のデモとパラメータとして渡される説明

C# リスト値変更のデモとパラメータとして渡される説明

高洛峰
高洛峰オリジナル
2016-12-15 15:48:062116ブラウズ

[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 サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。