Announcement

Collapse
No announcement yet.

Problem mit List

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit List

    Hallo,

    der unten stehende Code bereitet mir ein Problem: Zwar werden die Adressdaten aus einem Textfile korrekt ausgelesen und auch richtig in einer Variablen vom Typ adr_t abgelegt. Aber nachdem ich diese unterschiedlichen Adressen in die Adressliste via Add eingefügt habe steht zwar die richtige Anzahl an Datensätzen drin, aber n mal der zuletzt eingelesene. Weis jemand Rat ? Bin für jeden Tip dankbar.
    Im Voraus vielen Dank.

    Gruß
    Horst

    class adr_t {
    private const int parts = 4;
    private string[] Adresse = new string[parts];

    public static int Parts { get { return parts; } }

    // Indexer
    public string this[int i] {
    get { return Adresse[i]; }
    set { Adresse[i] = value; }
    }
    }
    }

    class Adressen {
    private List<adr_t> AdrList = new List<adr_t>();

    public Adressen(string fn) {
    try {
    string[] split = new string[adr_t.Parts];
    adr_t a = new adr_t();
    string line;

    using (StreamReader sr = new StreamReader(fn)) {
    while ((line = sr.ReadLine()) != null) {
    // faengt Leerzeilen ab, AdrParts -1 Delimiter sind möglich
    if (line.Length > adr_t.Parts - 1) {
    split = line.Split(';');
    for (int i=0; i<adr_t.Parts; i++) { a[i] = split[i]; }
    } // if
    AdrList.Add(a);
    } // while
    } // using
    } catch (Exception ex) {
    ...
    } // try ... catch
    } // constructor Adressen
    ...
    public void Add(adr_t a) { AdrList.Add(a); }
    public adr_t this[int i] { get { return AdrList[i]; } }
    ...
    }
    }

  • #2
    Hallo Horst,

    Du füllst a nur wenn line.length>adr_t.Parts-1 ist, rufst aber AdrList.Add(a) in der while Schleife immer auf. Da a ausserhalb der while Schleife deklariert ist kann folgendes passieren:
    Beim ersten Durchlauf ist die IF bedingung true und a wird gefüllt und zur Liste zugefügt. Bei den folgenden Durchläufen ist die IF Bedingung false und dasselbe a wird jedesmal zur Liste hinzugefügt.
    Das heisst entweder das Text-File oder die IF Bedingung passt nicht. Ich würde an dieser Stelle den Debugger bemühen.
    <br>
    Gruss, Brun

    Comment


    • #3
      Hi Bruno,

      Dein Tip war goldrichtig.
      Hab a innerhalb der Schleife instanziert, und es läuft.

      Danke

      Gruß
      Hors

      Comment


      • #4
        hab da gleich noch ein Problem:
        ein Klassenmember gibt eine generische List<string> zurück.
        Weiterhin habe ich eine RichTextbox deren Text ein string[] ist.
        Nun möchte ich die List in die Richtextbox kopieren. Aber es funktioniert mangels Konvertierung nicht. Wie stelle ich das an ??

        Schon mal vielen Dank.

        Gruß
        Hors

        Comment


        • #5
          Hab eine "provisorische" Lösung gefunden. Sie funktioniert zwar, macht aber einen ziemlich uneleganten Eindruck:

          List<string> tmpList = new List<string>();
          tmpList = tmpRE.ToLong();
          string[] tmpArray = new string[tmpList.Count];
          tmpList.CopyTo(tmpArray);
          edit.Txt = tmpArray;

          Das geht doch auch eleganter ??

          Comment

          Working...
          X