Hallo zusammen,
ich bin ziemlich neu in C# Sharp unterwegs und habe ein Problem auf dessen Lösung ich nicht komme.
Ich fülle eine Hashtable mit Textwerten bzw. strings.
Bei der Abfrage ob ein key vorhanden ist (ContainsKey) stürzt mir das Programm ab mit diesem Fehler (siehe Bild "unbehandelte Ausnahme").
Das Ganze passiert wenn der Key der Hashtable diesen Wert enthält:
WDFN8_P0,65_BOTTOM
Ich dachte erst es sei das Komma, aber andere Keys haben teilweise auch ein Komma.
Codeabschnitt:
while ((line = file.ReadLine()) != null)
{
// debug.AppendText(line);
shapes_in_cad_cols = line.Split('=');
if (shapes_in_cad_cols[0] == "FIL")
{
string shape = shapes_in_cad_cols[1];
shape = shape.Replace("\"","").ToString();
if(shapes_in_db.ContainsKey(shape))
{
list_shapes_in_cad.Rows.Add(shape);
list_shapes_in_cad[0, zeilenzaehler].Style.BackColor = Color.FromArgb(230, 255, 230);
} else {
list_shapes_in_cad.Rows.Add(shape);
list_shapes_in_cad[0, zeilenzaehler].Style.BackColor = Color.FromArgb(255, 230, 230);
shapes_not_checked.Rows.Add(shape,artikel[shape].ToString());
shapes_not_checked[0, zeilenzaehler_notchecked].Style.BackColor = Color.FromArgb(255, 230, 230);
shapes_not_checked[1, zeilenzaehler_notchecked].Style.BackColor = Color.FromArgb(255, 230, 230);
zeilenzaehler_notchecked++;
}
zeilenzaehler++;
}
}
Könnt ihr mir hier weiter helfen?
Wäre super
Danke
Gruß
Andreas
Hi,
grundsätzlich musst du mit dem Debugger raus finden, was hier genau schief geht.
Als Suchhilfe:
Irgendeine Variable die du verwendest - hat keinen Wert bzw. ist NULL.
Für uns im Forum ist hier nicht genau ersichtlich welche Variable keinen Wert hat - und schon gar nicht, wie man das behebt - aber ich für meinen Teil würde vermuten, dass:
string shape = shapes_in_cad_cols[1];
shape = shape.Replace("\"","").ToString();
Die Variable "shape" NULL ist und es bei shape.Replace... dadurch halt eben knallt.
LG
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hebt sich der NULL-Verweis bei shape nicht auf, weil es das zweite Element eines Splitt-Arrays ist? ((Was wiederum evtl. anfällig auf IndexOutOfRange ist)
Hebt sich der NULL-Verweis bei shape nicht auf, weil es das zweite Element eines Splitt-Arrays ist? :::
Hi,
wie sich ein NULL-Verweis aufheben soll versteh ich nicht - aber meine Vermutung war eh falsch, da String.Split keine NULL-Werte - sondern im Zweifelsfall leere Strings oder eben die IndexOutOfRange hinterlässt.
Egal - Fakt ist: irgendwas, das nicht NULL sein darf ist es. Und zur Auswahl stehen zu viele Variablen^^
LG
Hallo zusammen,
danke für eure Antworten.
Ich konnte das Problem jetzt eingrenzen, oder habe zumindest eine Vermutung.
Was die Fehlermeldung damit zu tun hat ist mir ein Rätsel.
Es hat wohl doch was mit dem Füllen der Hashtable zu tun.
Ich vermute dass wenn ein KOMMA im String ist, das dann eine Trennung zwischen key und value oder ähnliches interpretiert wird. Das könnte dann zu einem Nullwert führen.
Der Absturz passiert bei Werten mit einem Komma drin, ändere ich das Komma gegen Punkt und zwar in beiden Quellen, läuft das Script durch.
So fülle ich die Hashtable, ich benutze sie ausschließlich zur Suche eines Keys, also ohne setzen eines Wertes:
shapes_in_db.Add(result, "");
In der Variable result stehen jetzt Werte mit KOMMA, und hier denke ich ist die Ursache des Problems.
Was sagt ihr, kann das sein?
Wie kann ich das Problem umgehen?
Danke für eure Meinung shcon mal
Gruß
Andreas
Ich vermute dass wenn ein KOMMA im String ist, das dann eine Trennung zwischen key und value oder ähnliches interpretiert wird. Das könnte dann zu einem Nullwert führen.
Nö, das ist sicherlich nicht so. =)
Benutz den Debugger ([Artikel] Debugger: Wie verwende ich den von Visual Studio?) und schau Dir die Zeile an, bei dem es kracht.
Es hat eher was mit Deinem Split als mit der Hashtable zutun (meine Vermutung - aber ohne Debugger ist es hier ein Blick in die Glaskugel).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
hmmm ok, ich werde versuchen das Ganze nochmal im Debugger nachzuvollziehen.
Ich benutze CSharpDevelop und da komm ich irgendwie mit dem Debugger nicht klar.
Wenn ich auf beiden Seiten (Füllen der Hashtable, und Vergleich mit Variable)
das Komma gegen Punkt tausche funktioniert alles 😃
Hashtable mit Werten aus der Datenbank füllen:
result = result.Replace(",",".");
shapes_in_db.Add(result, "");
Vor Abfrage der Keys:
shape = shape.Replace(",",".");
if(shapes_in_db.ContainsKey(shape))
Ein unschöner Workaround, aber tut vorerst mal.
Gruß
Andreas
Könnte hier das Problem sein:
shapes_not_checked.Rows.Add(shape,artikel[shape].ToString());
und zwar das
_artikel[shape] _
null liefert, gerade da du dort die Einträge als Punkt drin hast und mit Komma entsprechend nixs gefunden wurde ???
(Würd mich nur grad so interessiern obs das is)
Hallo allgaeu73,
Ich benutze CSharpDevelop und da komm ich irgendwie mit dem Debugger nicht klar.
Du kannst dir noch alle Werte, die null werden können mal in eine Variable schreiben. Dann darauf debuggen (dann brauchst du kein Watch vom Visual Studio). Alternativ, wenn du gar nicht debuggen kannst logg dir die Werte mal in eine Textfile raus oder sowas. Oder schreib dir ein Beispielprojekt mal im Visual Studio. Es gibt schon Mittel und Wege sowas zu debuggen.
Wenn ich aber mal was lese über den Debugger von CSharpDevelop ist der jetzt nicht so weit weg von [Artikel] Debugger: Wie verwende ich den von Visual Studio?
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
@spyke.
Du hattest vollkommen recht, nur woher hast du das gewusst?? 😃
in den Artikeln stand tatsächlich teilweise der Wert NULL drin, das scheint es auch gewesen zu sein.
Habe den Workaround rückgängig gemacht und es läuft
Logischer Schluss.
artikel braucht als Key shape
kracht aber nicht mehr wenn punkt und komma ausgetauscht wird.
Im gezeigten Code schiens erstmal die einzige logische stelle zu sein bei der es krachen könnte.
Die einzige unbekannte war der Typ von artikel, ob dieser einfach null liefert (bei unbekannten Keys) (was er wohl macht) oder ArgumentException/IndexOutOfRangeException etc. schmeißt