Heim >Backend-Entwicklung >C#.Net-Tutorial >C#-Listenwertänderungsdemonstration und -erklärung als Parameter übergeben

C#-Listenwertänderungsdemonstration und -erklärung als Parameter übergeben

高洛峰
高洛峰Original
2016-12-15 15:48:062152Durchsuche

[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);
}

Sie können feststellen, dass sich nach dem Test die Anzahl der Elemente in der Liste von 0 auf 1 geändert hat.

Wenn die Variablenliste einer anderen Variablenliste2 zugewiesen wird, ändert sich die Liste auch, wenn Liste2 bedient wird.

Dies liegt daran, dass diese Variablen tatsächlich auf einen anderen Speicherblock verweisen und Änderungen an der Anzahl der Elemente und Elementwerte den entsprechenden Speicherblock ändern.

Aber beim Aufruf ihrer ConvertAll-Methode zeigt die zurückgegebene Variable auf einen anderen Speicherblock, der sich vom vorherigen unterscheidet.

[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;
}

Der obige Code ist anders. Dies ist Liste = Liste2, die tatsächlich auf den Speicherblock verweist, der Liste2 entspricht. Gemäß der vorherigen Schlussfolgerung ist die Liste im Parameter dieselbe wie Liste2 . Anstatt mit der Liste in TestMethod1 zu arbeiten.

Der folgende Code ist anders, aber jetzt erstellt er tatsächlich zwei neue Listbd43222e33876353aff11e13a7dc75f6(), die niemand mehr in TestMethod1() verwendet.

[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;
}

Das Gleiche gilt für Arrays.


Weitere als Parameter übergebene C#-Listenwertänderungen sowie Artikel zu Demonstrationen und Erklärungen finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn