ArrayList als Rückgabewert



  • Hallo,

    bin neu in C#. Das Problem ist, dass ich den Dateiinhalt nicht als kompletten String haben will, sondern als ein string array oder ArrayList, wo jeweils die Zeilen drinne gespeichert werden.

    Ich habe eine Funktion, die in eine ArrayList schön die Einträge speichert:

    public static ArrayList ReadFile(String sFilename)
    {
         ArrayList zeilen = new ArrayList;
         string line;
         int i = 0;
    
         try
         {
             StreamReader reader = new StreamReader(sFilename);
             while ((line = reader.ReadLine()) != null)
             {
                  zeilen.Items.Add(line);
             }
             reader.Close();
         }
         catch
         {
             zeilen.Items.Add(null);
         }
         return zeilen;
    }
    

    Kann ich diese Liste dann so nutzen?

    foreeach(ArrayList c in ReadFile(String sFilename))
    {
      //(...)
    }
    

    Wenn das nicht geht, wie kann ich in eine string[] variable dynamisch werte anhängen, ohne dass dabei ein bufferoverflow passiert? wächst eine string[] automatisch? 🙄

    wenn das nicht geht, kann ich die splitfunktion nutzen?
    string[] zeilen = text.Split("#END#");
    for(int i=0;i<zeilen.Lenght();i++){}

    Danke um eure Hilfe 😉
    Garry



  • Schau Dir mal List<string> an. Darin kannst Du erst einmal die Werte sammeln. Wenn Du dann irgendwo zwingend string[] brauchst weil List<string> nicht akzeptiert wird, kannst Du .ToArray (o.Ä.) verwenden um Dein string[] zu erhalten.

    (Und ja, Du könntest auch ReadToEnd verwenden und dann mit splitt Dein string[] erzeugen.)

    Wenn Du magst, kannst Du uns das eigentliche Ziel ja mal schreiben. Dann lässt sich da ggf. etwas spezifischeres sagen.

    Generell stellst Du eine Frage, deren Antwort man auch durch Ausprobieren hätte ermitteln können. (Oder ich bin zu blöd das Problem zu erkennen. Wenn ja bitte umformulieren - ich mag es gern verstehen 🤡



  • garry_weber schrieb:

    Kann ich diese Liste dann so nutzen?

    foreeach(ArrayList c in ReadFile(String sFilename))
    {
      //(...)
    }
    

    Da machst Du einen Denkfehler: Du bekommst ja *eine* 'ArrayList' zurück, und willst nun durch all seine Objekte durchgehen. Folgender Code geht also:

    foreach (object o in ReadFile(FileName)) { /* … */ }
    

    … aber das hat mehrere Nachteile. Der offensichtlichste ist, dass Du hier nur ein 'object' bekommst, wo Du doch eigentlich einen String haben willst. Außerdem ist die 'ArrayList' veraltet.

    Die Abhilfe hat Dir Knuddlbaer schon verraten: Verwende eine 'List<string>' statt der 'ArrayList', dann funktioniert folgender Code:

    foreach (string s in ReadFile(FileName)) { /* … */ }
    

Anmelden zum Antworten