Laden...

Wie befülle ich eine Liste einer Liste?

Erstellt von HansGlueck vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.245 Views
H
HansGlueck Themenstarter:in
2 Beiträge seit 2017
vor 6 Jahren
Wie befülle ich eine Liste einer Liste?

Hallo liebes Forum,

ich versuche meine ersten Schritte in OOP und bin wirklich noch vor dem klick glaube ich.

Zuerst einmal der Code-Schnipsel, damit man weiß was ich meine...


namespace WindowsFormsApplication4
{
    class MyDataClass
    {
        public class MyData
        {
            int id;
            string name;
            string tmestamp;
            List<string> rows;
            List<bool> parameters;        
        }
        
        List<MyData> dataField = new List<MyData>();
    }
}

Anmerkung:

rows und parameters sollen dann eine checkedListBox "befüllen" - also ein Eintrag in rows ist direkt mit einem Eintrag in parameters verküpft. Ich möchte halt zu jedem DatenEintrag eine Liste dieser beiden Werte haben.

Meine Fragen:

1.) Wird mit dem Konstruktor von dataField auch schon rows/parameters "erzeugt" - oder muss man dass dann noch machen, wenn man die dataField mit Add befüllt? Falls ja, wie müsste das im code aussehen?

2.) Wie müsste das korrekt aussehen, wenn ich die Klasse in einer separaten .cs Datei haben möchte (Austauschbarkeit) - wie benutzte ich die dann in der anderen Klasse (da wo Form1 definiert ist)?

3.) Oder gehe ich die Sache schon falsch bzw. ungünstig an? (manchmal sieht man ja den Wald nicht wegen der vielen Bäume...)

Auf jeden Fall schon mal vielen Dank für eure Antworten.

78 Beiträge seit 2016
vor 6 Jahren

Hallo HansGlueck,

in deinem Code sind mehrer Schwächen.

Zu Deinen Fragen:

1.) Hier wird eine Instanz vom Type List<MyData> erzeugt.
Instanzen von List<string> und List<bool> werden nach dem Add-Call nicht erzeugt.
Die Felder rows und parameters bleiben null.
Du könntest in der Klasse MyData einen Konstruktur anlegen. In diesem Konstruktur kannst du dann die rows und parameter befüllen. Alternativ setzt du die Werte nach dem erzeugen einer Instanz von MyData von "außen".

2.) Ich gehe mal davon aus, dass du VisualStudio verwendest. Wenn das der Fall ist,
dann musst du nur eine neue CS-Datei erzeugen. In dieser Datei kannst du dann eine neue Klasse anlegen. Wenn der Namespace in beiden CS-Files identisch ist, dann kannst die neu erzeugte Klasse einfach verwenden.

3.) Ich denke, dass es für dich einfacher wäre, wenn du dir erstmal ein Tutorial über C# anschaust.

z.B.: http://openbook.rheinwerk-verlag.de/visual_csharp_2012/

Auch wenn du eine neuere VisualStudio-Version verwendest, sollte dieses Online-Buch für dich ausreichend sein.

Später wirst du folgende Fragen beantworten können:*Eine Nested Class benötigst du eigentlich nicht *Business Logic gehört nicht in Form1 *Namespaces die aussagekräftig sind *Klassenamen die aussagekräftig sind *Wie setze ich Konstruktoren ein? *Wie setze ich Properties ein?

http://dotnet-paderborn.azurewebsites.net/

D
985 Beiträge seit 2014
vor 6 Jahren

rows und parameters sollen dann eine checkedListBox "befüllen" - also ein Eintrag in rows ist direkt mit einem Eintrag in parameters verküpft. Ich möchte halt zu jedem DatenEintrag eine Liste dieser beiden Werte haben.

Wenn solche Erläuterungen zu einer Klasse nötig sind, dann ist das Design der Klasse schin grundlegend falsch. Wenn etwas zusammengehört, dann fasst man es auch zusammen:


public class CheckableItem
{
    public bool IsChecked { get; set; }
    public string Item { get; set; }
}

public class MyData
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime Timestamp { get; set; }
    public List<CheckableItem> Items { get; set; }
}

H
HansGlueck Themenstarter:in
2 Beiträge seit 2017
vor 6 Jahren

Mir ist bewußt, dass ich hier erhebliche Schwächen habe - deswegen bin ich ja hier im Forum angemeldet.

Auf jeden Fall werde ich das OpenBook auch weiterhin bemühen - nur manchmal braucht es eben doch mehr Zeit bis es Klick macht... 😉

Bezüglich des Hinweises mit dem Zusammenfassen, was zusammen gehört - da passt wohl der Eintrag unter den Hinweise vor dem Schreiben der Frage ganz gut: Erst mal den Post erstellen und sacken lassen...

Vielen Dank für die Antworten - ich denke damit komme ich schon weiter. 👍 🙂

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo HansGlueck und willkommen im Forum,

ich hab den Thread zu spät gesehen, sonst hätte ich ihn geschlossen/gelöscht und ihn dir privat zugestellt, damit man ihn zusammen überarbeiten kann.

Bitte stell nur eine Frage pro Thread: Du siehst an den Antworten, dass die Leute anfangen zu schreiben "1)...2)...3)...". Mit viel Glück beginnen Antworten irgendwann mit "Ach bezüglich xyz...", was sehr unübersichtlich wird. Die Erfahrung sagt aber, dass das nicht passiert. Somit behandelt der Thread mehrere Themen. Kurzum: Der Thread wird unmoderierbar für uns. Wenn jetzt ein Hilfesuchender kommt kann es sein, dass ein Thema hier drin seine Frage beantwortet, aber andere nicht. Er hat keine Chance, das zu erkennen. Daher poste nur eine Frage pro Thread, damit das diskutiert werden kann. Das führt auch zu:
Wähle einen anständigen Titel. Der Suchende soll in der Übersicht sehen ob das Thema für ihn relevant ist oder nicht. "Liste einer Liste..." sagt überhaupt nichts über dein Problem aus. Bringe dein Problem auf den Punkt in einem Satz. Meistens hilft das übrigens auch schon, das Problem zu lösen. "Problem mit xyz" und "abc funktioniert nicht" sind KEINE Thread-Titel.

Steht auch alles in [Hinweis] Wie poste ich richtig?

[FAQ] Wie finde ich den Einstieg in C#? Hilft dir sicher auch weiter.

Wenn du wissen willst WANN genau ein ctor aufgerufen wird und wie die Klasse danach aussieht, kannst du dir einfach mal einen leeren Konstruktor bauen und einen Breakpoint reinsetzen. Dann [Artikel] Debugger: Wie verwende ich den von Visual Studio? .

Gruss

Coffeebean