簡體   English   中英

從字符串中獲取字符會返回意外數字嗎?

[英]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

這是來自MicrosoftConvert.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM