Datei in List(Of String) einlesen Fehler System.String[]

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

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von popopirat97.

    Datei in List(Of String) einlesen Fehler System.String[]

    Hallo Scripter!

    Ich programmiere relativ lange und bin mir sicher, dass dieser Code oft funktioniert hat. Ich benutze diesen Code sogar an anderer Stelle.
    Hier jetzt der Code:
    In der Klasse Variablen.vb erstell ich die List

    VB.NET-Quellcode

    1. Public Class Variablen
    2. Public Optionen As List(Of String) = IO.File.ReadAllLines("C:\Users\Public\Hairmaster\Optionen.txt", System.Text.Encoding.Default).ToList
    3. End Class


    Dann wird die datei in der Funktionen Klasse erneuert

    VB.NET-Quellcode

    1. Public Class Funktionen
    2. Dim Variable As New Variablen
    3. Public Sub lade_optionen()
    4. Try
    5. Variable.Optionen.Clear()
    6. Catch ex As Exception
    7. ex.ToString()
    8. End Try
    9. Variable.Optionen.AddRange(IO.File.ReadAllText("C:\Users\Public\Hairmaster\Optionen.txt", System.Text.Encoding.Default).ToArray)
    10. MsgBox(Variable.Optionen.ToString)
    11. End Sub
    12. End Class


    Und beim Start wird diese Funktion aufgerufen.
    In der MsgBox steht System.String[]

    Ich suche seit 2 Stunden den Fehler, kann Ihn aber nicht finden. ;(

    LG Julian

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „popopirat97“ ()

    Die MessageBox erwartet einen String, da du dieser aber ein String-Array übergibst, wird die ToString Funktion aufgerufen, da dies von Array-Datentypen nur so implementiert ist, dass der Datentyp selbst zurück gegeben wird erhälst du dies als Antwort. Das einlesen ist nicht direkt falsch, sondern die Ausgabe
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ich hatte es ebenfalls mit

    VB.NET-Quellcode

    1. Variable.Optionen(1)
    2. Variable.Optionen.Item(1)

    und

    VB.NET-Quellcode

    1. String.Join(VbNewLine, Variable.Optionen.ToArray (oder ToList.. bin mir nicht sicher))

    probiert.
    Des weiteren wie gesagt beim laden über IO die konvertierung .tolist und .toarray probiert

    An anderer stelle funktioniert es ja mit einer anderen list(of String) indem ich

    VB.NET-Quellcode

    1. MsgBox(Keys(1)) benutze

    Wieso funktioniert es dort so?
    Deshalb finde ich ja keinen fehler.
    und auch mit dem String und dann jede Zeile durchgehen und an den string anfügen geht nicht... immernoch System.String[]

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

    so müste es gehn:

    VB.NET-Quellcode

    1. Dim Variable As New Variablen
    2. Public Sub lade_optionen()
    3. Variable.Optionen.Clear()
    4. Variable.Optionen.AddRange(IO.File.ReadAllText("C:\Users\Public\Hairmaster\Optionen.txt", System.Text.Encoding.Default).ToArray)
    5. MsgBox(String.Join(Environment.NewLine, Variable.Optionen))
    6. End Sub
    7. End Class

    tja, Fehler abgeschrieben - probier nochma:

    VB.NET-Quellcode

    1. Dim Variable As New Variablen
    2. Public Sub lade_optionen()
    3. Variable.Optionen.Clear()
    4. Variable.Optionen.AddRange(IO.File.ReadAllines("C:\Users\Public\Hairmaster\Optionen.txt", System.Text.Encoding.Default))
    5. MsgBox(String.Join(Environment.NewLine, Variable.Optionen))
    6. End Sub
    7. End Class
    Da ist es wieder
    System.String[] ?(
    Normalerweise kriege ich es mit dem Code den du benutzt ja hin, aber nur in diesem Fall kommt immer wieder System.String[], egal was ich versuche
    Es ist wie verhext.
    Kann es noch einen anderen Grund für dieses Ergebnis geben? Einen ganz einfachen vielleicht?
    Ich habe das gefühl, es handelt sich um einen sehr dummen und einfachen Fehler....
    1 zu 1 übernommen, Copy&Paste lässt grüßen.
    Ansonsten existiert nur dazu dieser Code in Variablen.vb

    VB.NET-Quellcode

    1. Public Optionen As New List(Of String)

    wenn man in der Messagebox die Liste unter Variablen.vb aufruft, wird die klasse dann neu geladen?
    Also wird Optionen dann wieder als New List(Of String) erstellt vielleicht?

    Also durchlaufen wird er, sonst würde ja keine MsgBox ausgegeben
    Es wird überings in dem Form1_Load Event aufgerufen
    LG

    popopirat97 schrieb:

    System.InvalidCastException
    Gib einem Projekt sofort Option Strict On. Da bekommst Du bereits beim Hinschreiben des Codes die richtigen Hinweise.
    ReadAllText ==> ReadAllLines.
    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!
    Deine Variable.Optionen ist ja eine List(of T) und hat mW keine .toString methode.

    Versuch mal Deine Klasse Funktionen so zu ändern:
    (den Pfad natürlich anpassen :) )

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Funktionen
    2. Dim Variable As New Variablen
    3. Public Sub lade_optionen()
    4. Try
    5. Variable.Optionen.Clear()
    6. Catch ex As Exception
    7. ex.ToString()
    8. End Try
    9. Variable.Optionen.AddRange(IO.File.ReadAllLines("C:\temp\Optionen.txt", System.Text.Encoding.Default).ToArray)
    10. Dim s As String = ""
    11. For Each line In Variable.Optionen
    12. s += line & Environment.NewLine
    13. Next
    14. MessageBox.Show(s)
    15. End Sub
    16. End Class


    @KaskadekingDE: Ja, sry hab ich übersehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „torf160“ ()

    @popopirat97 Hast Du inzwischen auf

    RodFromGermany schrieb:

    Option Strict On
    umgestellt :?:
    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!