Argumente fehlerhaft, Konvertierung scheitert
-
benutzer_1234 schrieb:
Habe jetzt kurzen Prozess gemacht. Eventhandler komplett raus und über den Blitz bei Eigenschaften einfach einen neuen genriert. Jetzt läuft das debugging auch wieder weiter.
Hätte ich nicht anders gemacht
benutzer_1234 schrieb:
Liegt der Fehler darin, wie ich die Liste zurückgebe?
Sieht nicht so aus. Ausser der Code den du hier zeigst, stimmt nicht überrein mit deinem Code
Verkleinere mal das Deck auf ein paar Einträge und geh einfach mal mit dem Debugger durch, was er denn genau lädt. Du solltest unten beim Debuggen weitere Fenster haben (Autos, Locals). Sonst kannst du die Fenster holen über das Menü Debug -> Windows. Sobald der Debugger irgendwo hält, siehst du dort die Variablen und kannst sie auch aufklappen, um die inneren Werte zu sehen. Dies geht auch, wenn du mit der Maus über der Variable im Code schwebst.Also den Breakpoint am Anfang setzen und dann auch in die
LoadFromFile
reinsteppen mit F11 und die Methode durchgehen. Dann siehst du auch, ob alles korrekt geladen und abgelegt wird. Wenn du mit F10 durch die Methode stepst und ans Ende kommst, geht er automatisch wieder raus in dieLoad
Methode. BeiGetDecks
wieder F11 drücken, damit du reinkommst und wieder F10 bis du rauskommst.Über die Locals kannst du jeweils prüfen, welche Werte denn in der Liste sind.
Noch so ein paar Dinge am Rande:
Du hast erneut alle Variablen öffentlich gemacht. Komm davon weg! Mach alles privat was privat sein kann und nur das öffentlich, was wirklich öffentlich sein muss. Verwende Getter und Setter. Das erleichtert dir auch das Debuggen, damit nicht jeder von überallher auf die Variablen zugreifen kann und du damit bessere Kontrolle hast.
Wieso verwendest du als Wert des Decksdecimal
?decimal
sollte man nur für Spezialfällen benutzen, da es eine 128 Bit 10er Potenz Gleitkommazahl ist. Für Dezimalzahlen reichtfloat
oderdouble
meistens aus. Wenn man mit Ganzzahlen arbeitet, sollte man auch Ganzzahlen verwenden, z.B.int
.Grüssli
-
Ok, habe mir das Ausgabefenster geholt und das Debuggen gestartet.Ist es normal, dass dabei unzählige Zeilen rauskommen, bei denen in etwa das folgende steht:
Einzelschritt: Nichtbenutzercode "System.Windows.Forms.Application.SetCompatibleTextRenderingDefault" wird übersprungen.
-
Was ich schonmal sagen kann, das Programm befühlt die Werte (deck.Name) ordnungsgemäß. Auslesen der Datei funktioniert also. Die while-Schleife:
while ((line = rd.ReadLine()) != null) { string[] words = line.Split('|'); Deck deck = new Deck(); deck.Colors = words[0]; deck.Name = words[1]; deck.Categorie = words[2]; deck.Text = words[3]; deck.DeckValue = decimal.Parse(words[4]); liste.Add(deck); }
wird bis zum letzten Eintrag durchgeführt. Dann springt er in die Kopfzeile und möchte von vorn anfangen. Beim F11 auf deck.Colors stellt er fest, es gitb nun keinen Eintrag mehr und beendet die Schleife und öffnet sofort das Formload.
Danach springt er aber nicht in Hauptprogramm zurück, um:
List<Deck> Decks = decktab.GetDecks(); foreach (Deck deck in Decks) { listDecks.Items.Add(deck.ToString()); }
auszuführen.
-
Hast du eine leere Zeile im File? Z.b. am Ende? Dann führt das
line.Split('|')
zu einem Array mit der Länge 0 und wenn du aufwords[0]
zugreifst, wird eineIndexOutOfRangeException
geworfen.Er stellt daher nicht fest, dass es keine Einträge mehr gibt bei
words[0]
und beendet nicht einfach die Schleife, sondern er wirft dann eineIndexOutOfRangeException
. Und das sollte jedem sofort auffallen ...benutzer_1234 schrieb:
Ok, habe mir das Ausgabefenster geholt und das Debuggen gestartet.Ist es normal, dass dabei unzählige Zeilen rauskommen, bei denen in etwa das folgende steht:
Einzelschritt: Nichtbenutzercode "System.Windows.Forms.Application.SetCompatibleTextRenderingDefault" wird übersprungen.
Ja, das ist normal. Wenn du irgendwo reinspringen wolltest, was nicht zu deinem Code gehört. Wenn also dein Debugger z.B. bei
Application.SetCompatibleTextRenderingDefault(false)
war und du auf F11 gedrückt hastGrüssli
-
Tatsächlich. Am Ende der Einträge war eine Leerzeile. Der Debugger hatte auch " " angeziegt, aber das habe ich nicht so interpretiert, als das es eine Leerzeile ist
-
Nun kann ich endlich wieder ganz normal debuggen und zum Problem kommen, weshalb die Lsite nicht untereinander ausgegebn wird. Mir wurde gesagt debugge mal und schaue, was du erkennst. Wird richtig geladen, übergeben und so weiter.
Die decktab aus dem Hauptprogramm bekommt tatsächlich alle Werte und hat vier Einträge mit jeweils entsprechenden Namen, Farben und so weiter. Ich kann ehrlich gesagt nicht sehen, wo der Fehler ist, weil da ja nicht steht, wie die gespeichert werden.
-
Ehm, bei welchem Fehler sind wir nun? Ich habe gerade ein wenig den Überblick verloren
Grüssli
-
Sorry, kann ich verstehen.
Also ich habe ja die Liste listDecks, auf der die deck.Name alle ausgegeben werden sollten. Dies erfolgt aber nicht der Reihe nach unten:Name 1 Name 2 Name 3
sondern in 2er Schritten hintereinander mit merkwürdigem Zeilen umbruch, sieht so aus:
Name 1 Name 2 Name 3 Name 4
-
Ehm, ich muss hier mal raten ...
Du verwendest eineListView
? Und du hast in den Eigenschaften nicht die richtigeView
ausgewählt?Grüssli
-
Vielen Dank, du hast richtig geraten