Tipp für Datenhaltung in einer Klasse

  • VB.NET

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

    Tipp für Datenhaltung in einer Klasse

    Moin!

    ich brauche einmal ein Tipp für die Datenhaltung in einer Klasse um von anderen Funktionen darauf zugreifen zu können.

    Ich habe mehrere Blockdefintionen aus einer DXF-Datei - die haben einen Namen und den möchte ich als Key verwenden. Einmal so ausgedrückt.

    Dann habe ich 3 Long-Werte für den Beginn und das Ende einer Blockdefinition und die Zeile wo der Name zu finden steht.

    Am Ende gibt es dann noch ein List(of String) in dem der Code dieser Zeilen steht.

    Irgendwie weiß ich noch nicht wie ich die Daten intern verwaltet.

    Für jeden Parameter einen Dict. mit dem Namen des Block als Key oder ....

    ... hat einer von Euch einen Tipp für mich?

    Gruß Jan
    Ich meinte eher ein Beispiel der DXF Datei...

    Aber wenn ich dich richtig verstehe, brauchst du eine Klasse DxfRecord mit Properties für den Namen, Start-, End- und Namenzeile und die Liste.
    Die kannste dann in ein Dictionary(Of String, Of DxfRecord) ablegen, der Key entspricht dem Namen.

    Und schon hast du deine Datenhaltung. Oder wolltest du was anderes?
    @jan99 Fang an und pack diese Daten in eine Struktur oder Klasse und sammle die dann in einer List(Of T) auf.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi !

    RodFromGermany schrieb:

    @jan99 Fang an und pack diese Daten in eine Struktur oder Klasse und sammle die dann in einer List(Of T) auf.


    Das klingt gut und irgendwo habe ich soetwas schon einmal gesehen.

    Das habe ich jetzt gefunden und angepasst.

    VB.NET-Quellcode

    1. Public Class DXFBlock
    2. Public Property ZeileStart As Long
    3. Public Property ZeileEnd As Long
    4. Public Property ZeileName As Long
    5. Public Property Name As String
    6. Public Property Code As New List(Of String)
    7. End Class
    8. ...
    9. Public Class Form1
    10. ...
    11. Private _BlockDef As List(Of DXFBlock)
    12. Dim Data As New DXFBlock
    13. Data.Name = FoundBlockName
    14. Data.ZeileStart = DataIdxBlockStart
    15. Data.ZeileEnd = DataIdxBlockEnd
    16. Data.ZeileName = DataIdxBlockName
    17. Data.Code = BlockCode
    18. _BlockDef.Add(Data)
    19. ....


    Nun muss ich mir das nur noch etwas verinnerlichen, damit ich auch bei anderen Aufgaben berücksichtige. Hätte mir so einiges einfacher gemacht.

    Zwei Fragen zum Abschluss noch ...

    Frage 1 - Kann es sein, dass ich die neue Klasse von nicht VOR die Form stellen darf?

    Bekomme nämlich jetzt aus Appication.Designer.vb folgende Meldung:


    Frage 2 - Kann man da auch irgendwie eine Art Contains abfragen was einfacher ist als nur durch die Einträge zu iterieren?


    Gruß Jan

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „jan99“ ()

    zu 1: Ja, wenn ich recht erinnere ist das so.
    zu 2: Ja, kann man irgendwie. Ich weiss nicht, was du konkret unter 'irgendwie' verstehst, aber mit Linq.FirstOrDefault(<Bedingung>) kann man sehr schnuckelige Suchen in Datenbeständen verschiedenster Art formulieren.
    Weitere Kandidaten wäre Linq.Any(<Bedingung>) - das entspricht dem, was man sich unter .Contains vorstellen mag am meisten.
    Aber auch Linq.All(<Bedingung>) ist oft interessant und nützlich.
    @ErfinderDesRades Die sollte man nur meiden wenn man in einer sehr großen List<T> öfters einen "Key/Identifier" sucht, da ist dann Dictionary<TKey,TValue> besser geeignet.

    jan99 schrieb:

    Kann es sein, dass ich die neue Klasse von nicht VOR die Form stellen darf?
    Der Designer will das so haben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!