2010-10-01 78 views
0

正如問題所述,我試圖將字符串數組的其中一個元素解析爲int變量。雖然代碼在語法方面是正確的,但是當我嘗試運行它時,出現以下錯誤消息。將字符串數組的元素解析爲int

錯誤1構建內容拋出FormatException:輸入字符串的格式不正確。 在System.Number.StringToNumber(字符串str的NumberStyles選項,NumberBuffer &數的NumberFormatInfo信息,布爾parseDecimal) 在System.Number.ParseInt32(字符串s的NumberStyles風格的NumberFormatInfo信息) 在System.Int32.Parse(字符串多個) 在TileContent.Tiles.TileLayerProcessor.Process(XmlDocument的輸入,ContentProcessorContext上下文)在C:\用戶\達倫\文件\恩德斯\ TileContent \瓷磚\ TileLayerProcessor.cs:線75

這裏是代碼導致下面的問題

   foreach (string line in lines) 
       { 
        string realLine = line.Trim(); 

        if (string.IsNullOrEmpty(line)) 
         continue; 

        string[] cells = realLine.Split(' '); 

        for (int x = 0; x < width; x++) 
        { 
         int cellIndex = int.Parse(cells[x]); 

         layer.Layout[row, x] = cellIndex; 
        } 
+1

什麼它值得扼殺嗎? – luke 2010-10-01 13:20:29

回答

1

Embarrsingly足夠這是由於我對做這與它是如何在讀取搞砸周圍的信息互聯。

0

發生錯誤是因爲cells[x]無法解析爲Int32。嘗試調試和檢查cellsstring[] cells = realLine.Split(' ');

0

你說你正在試圖解析元素一個,但你的for循環解析元素所有

向我們提供您的lines變量的值,然後理解您要做的事情會容易得多。

此外,還可以使用int.TryParse(),以確定該值是否處於int與否,而不發出一個錯誤..

0

這很難不看到輸入的說法,但假設所有的線條只包含有效的int值,我猜想有多個空格分隔行中的數字。在這種情況下,由Split返回的數組將包含一些不能轉換爲int的空字符串。在這種情況下使用:

string[] cells = realLine.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 
0

如果你用簡單的INT解析,請務必提供的IFormatProvider識別的文化淵源。如果您有區域性不變的形式,使用號碼下面的代碼:

int cellIndex = int.Parse(cells[x], CultureInfo.InvariantCulture); 

它也許不是現在解決您的問題,但它是很好的總是傳遞的CultureInfo參數(這將作爲一個評論爲好)。 BTW。如果我是你,我會用的TryParse(),而不是...