Laden...

Hashtable stürzt bei Abfrage eines bestimmten Keys ab

Erstellt von allgaeu73 vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.783 Views
A
allgaeu73 Themenstarter:in
17 Beiträge seit 2016
vor 8 Jahren
Hashtable stürzt bei Abfrage eines bestimmten Keys ab

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

1.029 Beiträge seit 2010
vor 8 Jahren

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

J
251 Beiträge seit 2012
vor 8 Jahren

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)

1.029 Beiträge seit 2010
vor 8 Jahren

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

A
allgaeu73 Themenstarter:in
17 Beiträge seit 2016
vor 8 Jahren

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

16.835 Beiträge seit 2008
vor 8 Jahren

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).

A
allgaeu73 Themenstarter:in
17 Beiträge seit 2016
vor 8 Jahren

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

S
145 Beiträge seit 2013
vor 8 Jahren

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)

2.207 Beiträge seit 2011
vor 8 Jahren

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

A
allgaeu73 Themenstarter:in
17 Beiträge seit 2016
vor 8 Jahren

@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

S
145 Beiträge seit 2013
vor 8 Jahren

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