将字符串数组的元素解析为int

时间:2010-10-01 13:15:56

标签: c# string parsing integer

正如问题所说,我试图将字符串数组中的一个元素解析为int变量。虽然代码在语法方面是正确的,但是当我尝试运行它时,我收到以下错误消息。

  

错误1构建内容引发FormatException:输入字符串的格式不正确。      at System.Number.StringToNumber(String str,NumberStyles options,NumberBuffer& number,NumberFormatInfo info,Boolean parseDecimal)      在System.Number.ParseInt32(String s,NumberStyles样式,NumberFormatInfo信息)      在System.Int32.Parse(String s)      at TileContent.Tiles.TileLayerProcessor.Process(XmlDocument input,ContentProcessorContext context)在C:\ Users \ Darren \ Documents \ Enders \ TileContent \ Tiles \ 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;
                    }

5 个答案:

答案 0 :(得分:1)

这足以令人尴尬,这是因为我对信息进行了标记,这些信息与如何被阅读有关。

答案 1 :(得分:0)

发生错误是因为cells[x]无法解析为Int32。尝试在cells

之后调试并检查string[] cells = realLine.Split(' ');

答案 2 :(得分:0)

您说您正在尝试解析一个元素,但您的for循环正在解析所有元素。

向我们提供lines变量的值,然后更容易理解您要做的事情。

此外,您可以使用int.TryParse()来确定该值是否在int中,而不会抛出错误。

答案 3 :(得分:0)

很难说没有看到输入,但是假设所有的行只包含有效的int值,我猜想有多个空格分隔行中的数字。在这种情况下,Split返回的数组将包含一些无法转换为int的空字符串。在这种情况下使用:

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

答案 4 :(得分:0)

如果使用简单的int解析,请确保提供标识文化源的IFormatProvider。如果您的文化不变形式的数字,请使用以下代码:

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

现在可能无法解决您的问题,但总是传递CultureInfo参数(这也可以作为注释)。 BTW。如果我是你,我会使用TryParse()代替......