我有一個列表框,其中包含從訪問表中獲取的多個汽車的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