正如问题所说,我试图将字符串数组中的一个元素解析为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;
}
答案 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()代替......