Ich habe ein Listenfeld, das die ID-Nummer und das Modell einer Reihe von Autos enthält, die aus einer Zugangstabelle entnommen wurden. Ich habe einige Textfelder, die mit den Daten aus dieser Tabelle gefüllt werden, wenn ein Auto aus dem Listenfeld ausgewählt wird. Um die ID-Nummer des ausgewählten Autos, ich verwende diesen Code:Erhalten ein Zeichen aus einer Zeichenfolge eine unerwartete Zahl zurück?
int idNum = listBox1.SelectedItem.ToString()[0];
, die das erste Zeichen in dem Itemstring bekommen sollte (es die ID-Nummer). Wenn ich das erste Element in der Liste auswähle, ist das, was ich bekomme, 49. Mein erster Gedanke war, dass ich es nicht zu einem int gewandelt habe, also repräsentiert die 49 vielleicht einen Zeichencode für die Nummer, jedoch
Convert.ToInt16(listBox1.SelectedItem.ToString()[0])
Gibt die exakt gleiche Nummer zurück. Der zweite Punkt ist 50 und so weiter und so fort.
Ich möchte ändern, wie ich die ID-Nummer von dieser Char-Konvertierung sowieso bekommen, wie es mir gerade eingefallen ist, dass wenn ich 10 Autos treffe, es nicht funktioniert, aber warum bekomme ich einen so großen, durchweg Offset , und (vielleicht am verwirrendsten von allen) mehrstellige Zahl von aC# Entsprechung von charAt[0]
von Java?
Der spezifische Fehler, den ich bekommen habe ist, dass there is no row at position 49
, die erscheint, wenn ich versuche, den Wert mydataset.Tables["mytable"].Rows[idNum]["CarID"].ToString();
zu erhalten. Jetzt kann ich ein paar Dinge sehen, die dieses Problem verursachen könnten, ich habe absolut Ahnung, wenn Rows[idNum]["CarID"]
die richtige Syntax ist, und war sehr überrascht zu sehen, dass meine Vermutung funktioniert hat, aber es ist immer noch ein sehr seltsames Problem.
habe ich versucht und es funktionierte. Ich habe mit 'int idNum = (int) Char.GetNumericValue (listBox1.SelectedItem.ToString() [0]) - 1; 'abgeschlossen, obwohl ich verwirrt bin, warum dies funktioniert, aber' Convert.ToInt16' nicht. Oder wandelt das nur den ASCII-Wert des Zeichens in ein int/nicht umwandeln, da ASCII-Werte bereits ints sind? –
@SpaceOsstrich Ich denke, wenn Sie die 'Convert' anstelle von Parsing verwenden -' Convert' ist wahrscheinlich nur in diesem Fall eine Umwandlung, während ein 'Int16.Parse' tatsächlich die Zeichenfolge/char analysiert und den numerischen Wert zurückgibt. – Abbath
@SpaceOstrich überprüfen Sie die bearbeitete Antwort, ich fügte den tatsächlichen Code von Microsoft hinzu. – user3185569