Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Arrays in Structure

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Arrays in Structure (289 mal gelesen)
Theo37
Mitglied
Techniker


Sehen Sie sich das Profil von Theo37 an!   Senden Sie eine Private Message an Theo37  Schreiben Sie einen Gästebucheintrag für Theo37

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 19. Jul. 2010 14:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo an Alle,

eine Frage zu VB.Net.

In möchte schreiben in einer Structure:
Structure Blockzeile
        Dim Ident As String
        Dim Attri(15) As String
    End Structure

Das geht aber nicht, die fünfzehn in der Klammer geht nicht, da bekomme ich eine Fehlermedlung. Also lasse ich die Klammer leer.

Was muß ich machen um das Array später doch so verwenden zu können:

For Y = 0 To 15
        zeile(i).Attri(Y) = xlstab.Cells(i + 1, Y + 2).Value
Next

Irgendwas mit Redim?

Vielen Dank, Theo

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 19. Jul. 2010 22:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

dieses würde funktionieren:

Code:
  Structure Blockzeile
      Dim Ident As String
      Dim Attri() As String
  End Structure

  Public Sub test()
      Dim tBZ As Blockzeile
      tBZ.Ident = "4711"
      ReDim tBZ.Attri(15)

      For i As Integer = 0 To 15
        tBZ.Attri(i) = i.ToString
      Next
  End Sub



ABER: wenn es sich vermeiden läßt, dann bau das gleich als Klassen oder als reines Array auf.
Begründung: Struct-Definitionen sind eigentlich ein Relikt aus der Vergangenheit (und imho nur aus Kompatibilitätsgründen mitgeführt) und Du kannst diese nicht als Parameter an Funktionen übergeben, die in einem anderen Namespace liegen. Damit wird alles gewinnbringende wie z.B. Klassenvererbung etc zunichte gemacht.
Dazu kommt auch noch, dass ich stark annehme, dass das Freimachen des Speichers (Verwaltung der Garbage-Collection) mit dieser Form der Speicherung wohl keine große Freude hat, das ist aber jetzt nur Bauchgefühl.

Ein kleines (ziemlich sorgloses) Beispiel als Ersatz:

Code:
  Public Sub test2()
      'erstellen einer Instanz
      Dim tBZ As Blockzeile = New Blockzeile("123")
      'anlegen der Werte für ATTRI
      For i As Integer = 0 To 15
        Call tBZ.addAttri(i.ToString)
      Next
      'auslesen der ATTRI-Werte
      For Each tStr As String In tBZ.Attri
        Debug.Print(tStr)
      Next
  End Sub


  Public Class Blockzeile
      Private pIdent As String = ""
      Private pAttri As List(Of String) = Nothing

      Public Sub New(ByVal Ident As String)
        pIdent = Ident
        pAttri = New List(Of String)
      End Sub

      Public Sub addAttri(ByVal Str As String)
        pAttri.Add(Str)
      End Sub

      Public ReadOnly Property Attri() As List(Of String)
        Get
            Return pAttri
        End Get
      End Property

  End Class



- alfred -

------------------
www.hollaus.at

Theo37
Mitglied
Techniker


Sehen Sie sich das Profil von Theo37 an!   Senden Sie eine Private Message an Theo37  Schreiben Sie einen Gästebucheintrag für Theo37

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 20. Jul. 2010 14:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Alfred,

ich verwende die erste Lösung. Sieht dann so aus:

For i = 0 To Anzahl
            ReDim zeile(i).Attri(0 To 15)
            zeile(i).Ident = xlstab.Cells(i + 1, 1).Value
            For Y = 0 To 15
                zeile(i).Attri(Y) = xlstab.Cells(i + 1, Y + 2).Value
            Next
        Next

Die Zweite Lösung schau ich mir mal an. Kann ich die Klasse auch als Array verwenden?
Erscheint mir etwas aufwendiger.

Gruß, Theo

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 20. Jul. 2010 14:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Kann ich die Klasse auch als Array verwenden?

Jede Instanz einer Klassendefinition darfst Du als eigene Objektdefinition auffassen und diese darfst Du in Listen, in Collections, in Arrays etc sammeln.


>> Erscheint mir etwas aufwendiger.

Ja, es wird um ein paar Zeilen mehr in die Tastatur geklopft, der Zeitaufwand von vielleicht 1 Min wird aber wohl nicht das Problem sein. Du siehst aber auch schon an meinem Beispiel, dass eben jede Klasse wiederum ihre eigenen Funktionen haben kann (die Zeilen im Hauptcode werden daher minimiert) und damit gewinnt auch die Struktur des Programms deutlich an Lesbarkeit.
Die eine Minute, die Du so am Anfang verlierst, hast sich beim ersten Nachbearbeiten Deines Programms hundertfach amortisiert.

- alfred -

------------------
www.hollaus.at

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz