为什么这不能从我的文本文件中读取整数? Sytem.FormatException

Why can't this read integers from my text file? Sytem.FormatException

好的,所以我正在制作一个从文本文件中读取数据以创建事件的游戏。发生的事情是随着时间的推移,如果发生令人兴奋的事情,会出现一个包含三个选项的弹出框,单击它们会影响游戏等等。

我创建了一个函数,它可以接受各种参数并自动生成表单 - 到目前为止还不错 - 但是在代码中编写大型事件描述是混乱且无组织的。相反,我决定创建另一个函数,它从文本文件中获取值,组织它们,然后调用第二个函数来创建 'event'.

现在,正如我所说,每个事件都有三个选择(见下文),每个选择都会对三个因素之一(认可、声望、权力)产生影响,我还没有完全正确地制定出机制,但是一切都很顺利,一切都运行得很好,直到我需要从文本文件中加载这些整数。

它一直无法将字符串转换为整数,这是为什么,我该如何解决?

文本文件的第 11 行:10(是的,我检查过,这是正确的阅读行)

代码:

List<int> affecta = new List<int>();
affecta.Add(Int32.Parse(System.IO.File.ReadLines(filename).Take(11).First()))

我可以完美加载图片文件位置等其他东西,所以'filename'指向正确的.txt

对于经验丰富的人来说,这可能是显而易见的事情,但我就是不明白为什么。

我不认为 Take 会如您所想 - 它会抓取前 11 项和 returns 所有,所以您得到IEnumerable 共 11 项。当你在上面做 First 时,你会得到位置 0 的项目,而不是位置 10。我想你想要 Skip 然后 First,这将跳过前 10 个项目和 return 下一个(第 11 个)项目:

affecta.Add(Int31.Parse(System.IO.File.ReadLines(filename).Skip(10).First()))

如果您使用 Take(11),则表示 "get 11 rows from the source"。在那之后你有 First(),所以你会得到他们中的第一个。您实际上是在尝试将第一行转换为整数。

我假设你想使用 Skip(10) 因为你想要第 11 行。

Take(11).First() returns 包含 11 个元素的 IEnumerable 中的第一个元素。

相反,跳过 IEnumerable 中的前 10 个和 select 第一个。

affecta.Add(Int32.Parse(System.IO.File.ReadLines(filename).Skip(10).First()))

或者,从 IEnumerable 中取出前 11 个和 select 最后一个。

affecta.Add(Int32.Parse(System.IO.File.ReadLines(filename).Take(11).Last()))