У меня есть окно списка, которое содержит идентификационный номер и модель ряда автомобилей, взятых из таблицы доступа. У меня есть некоторые текстовые поля, которые будут заполнены данными из этой таблицы, когда автомобиль будет выбран из списка. Чтобы получить идентификатор выбранного автомобиля, я использую этот код:Получение символа из строки возвращает неожиданный номер?
int idNum = listBox1.SelectedItem.ToString()[0];
Который должен получить первый символ в строке элемента (это идентификационный номер). Когда я выбираю первый элемент в списке, то я вместо этого получаю 49. Моя первая мысль заключалась в том, что я не добавлял его в int, поэтому, возможно, 49 представляет собой некоторый код символа для номера, однако
Convert.ToInt16(listBox1.SelectedItem.ToString()[0])
Возвращает точно такой же номер. Второй элемент - 50, и так далее и т. Д.
Я хочу изменить способ получения идентификационного номера из этого преобразования символов, так как мне просто пришло в голову, что как только я нажму 10 автомобилей, это не сработает, но почему я получаю такое большое, неизменно смещенное , и (возможно, самый непонятный из всех) многозначный номер от aC# эквивалент java charAt[0]
?
Специфическая ошибка, которую я получаю, заключается в том, что there is no row at position 49
, который появляется, когда я пытаюсь получить значение mydataset.Tables["mytable"].Rows[idNum]["CarID"].ToString();
. Теперь я вижу несколько вещей, которые могут вызвать эту проблему, я абсолютно знаю идею, если Rows[idNum]["CarID"]
является правильным синтаксисом, и был очень удивлен, увидев, что мое предположение работает, но это все еще очень странная проблема.
Я попробовал, и это сработало. Я закончил с помощью 'int idNum = (int) Char.GetNumericValue (listBox1.SelectedItem.ToString() [0]) - 1;', хотя я смущен, почему это работает, но 'Convert.ToInt16' не делает. Или это просто преобразование значения ASCII символа в int/не преобразование чего-либо, поскольку значения ASCII уже являются ints? –
@SpaceOstrich Я думаю, что когда вы используете 'Convert' вместо синтаксического анализа -' Convert', возможно, просто делает приведение в этом случае, тогда как 'Int16.Parse' будет фактически анализировать строку/char и возвращать числовое значение. – Abbath
@SpaceOstrich проверяет отредактированный ответ, я добавил фактический код из microsoft. – user3185569