Wie kann ich eine Liste an eine Funktion übergeben und wieder zurück?

  • C#

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von BiedermannS.

    Wie kann ich eine Liste an eine Funktion übergeben und wieder zurück?

    Hallo Leute. Meine Frage:

    Habe funktion A, die eine Liste von Componenten hat die ich selbst gemacht habe. In der Funktion mach ich das so:


    Quellcode

    1. List<tCOMPONENT> eugen=new List<tCOMPONENT>();


    so, jetzt habe ich eine Funktion B die die Liste fühlt und wieder zurück geben sollte. ich komm nicht auf die Syntax. kann mir jemand helfen?
    @Dodo: ich glaube hier wird C# gesucht

    Das müsste mit dem ref Schlüsselwort gehen:

    C#-Quellcode

    1. private void Form1_Load(object sender, EventArgs e)
    2. {
    3. List<String> TestListe = new List<String>(); //instanzieren einer neuen Liste
    4. Fill(ref TestListe); //aufruf der Methode
    5. }
    6. void Fill(ref List<String> MyList) //wichtig ist das ref Schlüsselwort, damit die Funktion die Liste auch ändern kann
    7. {
    8. MyList.Add("Test"); //Hier wird befüllt
    9. }


    mfg
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    Ich wollte ja 1 kein Copy&Paste Code geben, zudem kann man VB nach C# einfach übersetzten und da ich nicht genau weiß wie das in C# realisiert wird habe ich das VB Beispiel gegeben. Was ich aber weiß, das auch in C# Returnwerte funktionieren und man somit nicht mit Referenz arbeiten muss, was ich als nicht sonderlich schön und übersichtlich erachte.

    Edit:

    C#-Quellcode

    1. private List<tCOMPONENT> Fuellen()
    2. {
    3. List<tCOMPONENT> tList = new List<tCOMPONENT>();
    4. // liste befüllen
    5. return tList;
    6. }
    War auch nicht schlecht gemeint. Ich dachte du hast es nicht gesehen.

    Ich habe den Code auch nur deswegen gepostet, weil es leichter ist das ref zu erklären.

    Mit return gehts auch, verkompliziert das ganze aber um etwas (also mehr zu schreiben), weil ich ne neue instanz in der funktion erstellen muss und diese dann zurückgeben und in die alte instanz schreiben.
    Aber warum sollte man zuerst ne kopie von etwas machen, was man im nächsten moment wieder mit denselben werten befüllt. Da hab ich ein zweites, unnötiges, objekt im speicher.

    Man könnte es auch als extension machen, aber das ist bei einer kleinen befüllroutine zu viel arbeit im vergleich zu dem was man damit erreichen will...

    Edit: Btw. dachte ich gesehen zu haben, das er die Liste übergeben möchte. Hab mich da wohl verlesen... :S Naja, hauptsache ihm wird geholfen :)
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    Hätte er eine Instanz, könnte man sie übergeben aber trotzdem mit Return arbeiten, denn wenn ich eine Funktion nicht kenne weiß ich nicht was sie mit der Liste macht, ob die ByRef übergeben wird

    VB.NET-Quellcode

    1. lalaFunktion(liste)


    mit Return sieht man sofort, die Funktion macht irgendwas mit der Liste und gibt sie verändert zurück

    VB.NET-Quellcode

    1. liste = lalaFunction(liste)


    Wobei es bei Listen eh egal is, weil selbst wenn die ByVal angegeben werden, wird eine Referenz übergeben, aber trotzdem find ichs zum späteren Lesen des Codes einfacherer.
    ich find c# so und so nicht übersichtlich. ^^

    Aber ich find nicht das viel unterschied zwischen

    C#-Quellcode

    1. Befülle(Liste);

    und

    C#-Quellcode

    1. Liste = Befülle(Liste);

    ist.


    Wenn die Benennung passt, sieht man eh was die Methode tut.

    Ist glaub ich auch etwas geschmackssache...

    Ist zwar OT aber es gibt Situationen in denen man nur mit ByRef arbeiten kann, da es sonst nicht möglich ist die Richtigen Datentypen zu verwenden (z.B.: COM)
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D