Arrays gleich setzen.

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RoulettePilot.

    Arrays gleich setzen.

    Hallo Community ^^

    Ich habe ein kleines Problem, und komme irgendwie nicht weiter...
    ich habe 4 Arrays deklariert:

    VB.NET-Quellcode

    1. Private DRoot(5) As String
    2. Private DName(5) As String
    3. Private ODRoot(5) As String
    4. Private ODName(5) As String

    Die ohne 'O' am Anfang werden zu einem bestimmten Ereignis nach und nach gesetzt (z.B.
    DRoot(0) = "A:\"
    DName(0) = "Der USB-Stick"

    DRoot(1) = "B:\"
    DName(1) = "TopSecret"

    usw.

    So. das funktioniert auch alles noch. Dann setzte ich die Aktuelle liste in die Alte um ("ODRoot" und "ODName"):

    VB.NET-Quellcode

    1. ODRoot = DRoot
    2. ODName = DName

    Damit ich später kontrollieren kann, welches Gerät entfernt wurde. Nun wird Laufwerk "B:\" Entfernt und DRoot(1) und DName(1) setzen sich auf "Nothing" zurück. Genau so wie ich es wollte.
    Aber! Zum selben Zeitpunkt wo sich (z.B.) DRoot(1) auf Nothing setzt, setzt sich auch ODRoot(1) auf Nothing und ich kann dann nicht überprüfen welcher nun entfernt wurde. Was mich sowieso wundert, da er noch nicht am Code abschnitt "ODRoot = DRoot" angekommen ist, und trotzdem ODRoot ändert.

    Daher frage ich euch jetzt, warum das passiert und wie ich es so hinbekomme dass es nur auf Anweisung Synchronisiert wird?
    Bellum et Pax.
    Omne initium est difficile.
    -KenJy ;D
    Damit arbeite ich ja, nur irgendwie muss ich ja vergleichen, was mal da war und was da ist. Hab's inzwischen raus bekommen. Einfach die einzelnen Arrays gleich gesetzt und schon mach er es nur dann, wenn er zu der Code Zeile kommt...

    Lösung:

    VB.NET-Quellcode

    1. For cnt As Short = 0 To 5
    2. ODRoot(cnt) = DRoot(cnt)
    3. ODName(cnt) = DName(cnt)
    4. Next
    Bellum et Pax.
    Omne initium est difficile.
    -KenJy ;D
    Hallo,
    auch wenn dein Problem gelöst ist, so habe ich hier eine Variante mit praktisch nur einem Befehl.
    Die Internen Geschichten sind meist schneller als wenn man mit Schleife arbeitet.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim QuellArray(3) As String
    3. Dim ZielArray(3) As String
    4. QuellArray(0) = "A"
    5. QuellArray(1) = "B"
    6. QuellArray(2) = "C"
    7. QuellArray(3) = "D"
    8. ' hier wird kopiert
    9. QuellArray.CopyTo(ZielArray, 0)
    10. End Sub


    EDIT:
    und was ich gerade noch sehe: Du solltest bei der Schleife keinen Festen Wert nehmen. Änderst du Morgen die Feldlänge, musst du auch das Programm ändern,
    und da kann, wenn man es an vielen Stellen hat, schnell was übersehen werden. Deshalb mit length arbeiten:

    VB.NET-Quellcode

    1. For i = 0 To DRoot.Length - 1
    2. ....
    3. Next

    RoulettePilot schrieb:

    Deshalb mit length arbeiten
    Oder (wenn man es wie ich umständlich machen will) mit einer Variable der ich die Anzahl der Arrays zuweise :thumbsup: :whistling: Funktioniert zwar aber Praktisch ist das wahrscheinlich nicht...
    Bellum et Pax.
    Omne initium est difficile.
    -KenJy ;D