Auf Liste aus anderer Methode zugreifen C#?

3 Antworten

Geht nicht.
Alles in einer Methode ist nach Ende der Methode weg.
Du musst die Methode also außerhalb definieren oder aus der Methode raus geben.

Möglichkeit 1:

public void Method1()
{
    List<string> list = new List<string>();

    Method2(list);

    foreach (string s in list)
        Console.WriteLine(s); 
}

public void Method2(List<string> list)
{
    list.Add("a");
    list.Add("b");
}  

Möglichkeit 2:

public void Method1()
{
    List<string> list = Method2(list);

    foreach (string s in list)
        Console.WriteLine(s); 
}

public List<string> Method2()
{
    var list = new List<string>();

    list.Add("a");
    list.Add("b");

    return list;
}

Möglichkeit 3:

private List<string> _list = new List<string>();

public void Method1()
{
    Method2();

    foreach (string s in _list)
        Console.WriteLine(s); 
}

public void Method2()
{
    _list.Add("a");
    _list.Add("b");
}  

Hat alles seine Vor- und Nachteile, die drei Möglichkeiten sind also nicht gleichwertig.

Woher ich das weiß:Berufserfahrung

Du kannst eine lokale Variable nicht global benutzen. Du musst die Variable also global machen:

public List<string> liste = new List<string>();

public void Start()
{
  // Hier kannst du auf liste zugreifen und später dies von wo anders auch mit benutzen.
}

Alternativ kannst du auch das ganze per Parameter übergeben. Ich denke aber, dass der Weg 1 (oben) eher zu deinem Vorhaben passt.

Übrigens: Methoden schreibt man in C# groß, also bitte void Start() und nicht void start(). Das sind C# Conventions, also regeln, die man einhält, für einheitlichkeiten. Fehler wird es nicht werfen

Es gibt mehrere Möglichkeiten.

Entweder du definierst eine Klassenvariable und weist ihr die Liste zu. Das ist dirty.

Du kannst dort, wo du die Funktion aufrufst, als Rückgabeparameter der funktion die Liste haben. Diese kannst du dann der anderen Funktion als Eingabeparameter übergeben.

Wie deine tatsächliche Klasse aussieht wissen wir hier leider nicht.

Woher ich das weiß:Berufserfahrung – Softwareentwickler
Criminechen 
Fragesteller
 21.06.2022, 14:22

Dankeschön! Könntest du eventuell für diese Lösung ein Beispiel sagen? 😅

0
Palladin007  21.06.2022, 14:31
Entweder du definierst eine Klassenvariable und weist ihr die Liste zu. Das ist dirty.

Das ist nicht zwingend dirty, es gibt auch viele sinnvolle Anwendungsfälle dafür.

Aber ja, wenn man das nicht zwingend braucht, sollte man es nicht machen, da man sich damit schnell viele potentielle Bugs einbaut.

0
zooper  22.06.2022, 07:13
@Palladin007

Du sagst es ist nicht dirty, und dann beschreibst du das es dirty ist.

Natürlich gibt es anwendungsfälle. Sonst gäbs die Möglichkeit nicht.

0
Palladin007  22.06.2022, 15:53
@zooper
Du sagst es ist nicht dirty, und dann beschreibst du das es dirty ist.

Nein, ich ergänze eine Bedingung, wann es dirty ist.

Da wir hier nichts vom konkreten Ziel wissen, können wir hier auch nicht sagen, ob es dirty ist oder nicht.

0
zooper  22.06.2022, 15:57
@Palladin007

Generell ist es zu vermeiden wenn es anders geht.

Keine Ahnung wieso du dich deswegen so aufregst. Ich hab bereits geschrieben dass wir nicht wissen welches sinnvoller ist da wir den Code nicht sehen.

Da mich solch ein pedantisches Verhalten nervt Block ich dich. Einen schönen Tag.

0
Palladin007  22.06.2022, 16:09
@zooper

Ich habe mich nicht aufgeregt, ich habe eine Ergänzung geschrieben O.o

Aber bitte, wenn Du wegen so einer Kleinigkeit blocken willst, mir soll's recht sein.

0