Auf Liste aus anderer Methode zugreifen C#?
Hi!
Ich habe eine (strings) Liste in void start() erstellt und brauche diese Liste in einer anderen Methode im gleichen Script. Aber ich kriege das einfach nicht hin.
Weiß jemand zufällig, wie man das macht? :)
danke im Voraus ^^
(Ps: gegoogelt habe ich übrigens schon, klappt irgendwie alles nicht ;D)
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.
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.
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.
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.
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.
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.
Dankeschön! Könntest du eventuell für diese Lösung ein Beispiel sagen? 😅
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.