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

本文关键字:整数 读取 Sytem FormatException 文件 不能 我的 文本 为什么 | 更新日期: 2023-09-27 18:13:18

我正在制作一款从文本文件中读取数据以创建事件的游戏。随着时间的推移,如果发生了一些令人兴奋的事情,就会出现一个带有三个选项的弹出框,点击它们就会影响游戏,以此类推。

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

现在,正如我所说的,每个事件都有三个选择(见下文),每个选择都有三个因素(认可,声望,权力)中的一个结果,我还没有完全正确地制定机制,但一切都很顺利,直到我需要从文本文件中加载这些整数。

它一直有麻烦将字符串转换为整数,为什么是这样,我怎么能解决它?

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

代码:

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

我可以加载其他东西,比如图片文件的位置,所以'filename'指向正确的。txt

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

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

我不认为Take会像你想的那样——它抓取前11项并返回所有项,所以你得到了包含11项的IEnumerable。当你在上面做First时,你得到的是位置0的物品,而不是位置10。我认为您需要Skip,然后是First,它将跳过前10项并返回下一个(第11项)项:

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

如果您使用Take(11),这意味着"从源获取11行"。之后你有First(),所以你会得到它们中的第一个。您实际上是在尝试将第一行转换为整数。

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

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

相反,跳过前10个,从IEnumerable中选择first。

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

或者,取前11个并从IEnumerable中选择Last。

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