我有一个列表框,其中包含从访问表中获取的多个汽车的ID号和型号。当从列表框中选择一辆汽车时,我有一些文本框将填充该表中的数据。要获得所选汽车的身份证号码,我用这个代码:从字符串中获取字符会返回一个意外的数字吗?
int idNum = listBox1.SelectedItem.ToString()[0];
哪些应该得到的项目字符串的第一个字符(它的ID号)。当我选择列表中的第一个项目时,我得到的是49.我的第一个想法是我没有将它转换为int,所以也许49代表数字的一些字符代码,但是
Convert.ToInt16(listBox1.SelectedItem.ToString()[0])
返回完全相同的数字。第二项是50,依此类推。
我想改变我如何从这个字符转换中得到ID号码,因为它只是让我发现,一旦我打到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值已经是整数? –
@SpaceOstrich我认为当你使用'Convert'而不是解析 - 'Convert'可能只是在这种情况下进行强制转换,而一个'Int16.Parse'实际上会解析字符串/ char并返回数值。 – Abbath
@SpaceOstrich检查编辑的答案,我添加了微软的实际代码。 – user3185569