[英]Getting a character from a string is returning an unexpected number?
我有一個列表框,其中包含從訪問表中獲取的ID號和許多汽車的型號。 當從列表框中選擇汽車時,我有一些文本框將填充該表中的數據。 要獲取所選汽車的ID號,我使用以下代碼:
int idNum = listBox1.SelectedItem.ToString()[0];
哪個應該獲得項目字符串中的第一個字符(它的ID號)。 當我選擇列表中的第一項時,我得到的是49。我首先想到的是我沒有將其強制轉換為int,因此49可能代表該數字的某些字符代碼,但是
Convert.ToInt16(listBox1.SelectedItem.ToString()[0])
返回完全相同的數字。 第二項是50,依此類推。
我想改變從char轉換中獲取ID號的方式,因為我突然想到打了10輛車就行不通了,但是為什么我會得到這么大的,始終如一的偏移量,並且(也許最令人困惑的)來自ac#的java的charAt[0]
多位數?
我一直得到的特定錯誤是, there is no row at position 49
當我嘗試獲取mydataset.Tables["mytable"].Rows[idNum]["CarID"].ToString();
。 現在,我看到了可能導致此問題的一些原因,我完全知道Rows[idNum]["CarID"]
是否是正確的語法,並且很驚訝地發現我的猜測Rows[idNum]["CarID"]
,但是仍然很奇怪非常奇怪的問題。
您需要獲取Char
的數值:
int idNum = (int)Char.GetNumericValue(listBox1.SelectedItem.ToString()[0]);
而int idNum = listBox1.SelectedItem.ToString()[0]);
返回字符'1'
的ASCII
(示例)為49
。
這是來自Microsoft的Convert.ToInt16
實際代碼:
public static short ToInt16(char value)
{
// Some validations
return (short)value;
}
char
Convert.ToInt16
進行Explicit
轉換,該轉換獲取該Character
值的ASCII
。
對於處理多個數字:
string str = "37abcdef";
string myStrNumber = Regex.Match(str, @"\d+").Value;
int idNum2;
if (myStrNumber.Length > 0)
idNum2 = Convert.ToInt32(myStrNumber);
else
{
// Handle Error
}
或不使用正則表達式:
string str = "37abcdef";
string myStrNumber = "";
for(int i = 0; i < str.Length; i++)
{
if (Char.IsNumber(str[i]))
myStrNumber += str[i];
}
int idNum2;
if (myStrNumber.Length > 0)
idNum2 = Convert.ToInt32(myStrNumber);
else
{
// Handle Error
}
嘗試這個
int idNum = Convert.ToInt16(listBox1.SelectedItem.ToString()[0].ToString())
因為
listBox1.SelectedItem.ToString()[0]返回字符。 如果將Char類型數據轉換為Integer,它將返回Char的ASCII。 因此,在將其轉換為Integer (listBox1.SelectedItem.ToString()[0] .ToString() )之前,先將其轉換為字符串。
user3185569確定了問題,但是我將提出最終使用的解決方案以供將來參考。 int idNum = listBox1.SelectedItem.ToString()[0]);
行正在獲取ASCII
,49表示(int)Char.GetNumericValue(listBox1.SelectedItem.ToString()[0]) -1;
表示2等,這可以通過使用(int)Char.GetNumericValue(listBox1.SelectedItem.ToString()[0]) -1;
。
(int)Char.GetNumericValue
獲取該字符的實際數字值,而不是ASCII
值。 - 1
代表從1開始的汽車ID,但表索引從0開始。
如果仍然使用字符串的第一個字符獲取ID號,那么仍然存在數字問題,一旦有9輛以上的汽車,該代碼將無法工作。 字符串在列表框中顯示為"[idNum]: [carName]"
。 例如: 1: Astra
。 為了獲得ID號,我使用了Split(':')[0]
,它將字符串拆分為子字符串數組,並在每個:
字符處拆分。
代碼的工作行是:
int idNum = Convert.ToInt16(listBox1.SelectedItem.ToString().Split(':')[0]) - 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.