为什么它不能从我的文本文件中读取整数?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
对于经验丰富的人来说,这可能是显而易见的,但我就是不明白为什么。
我不认为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()))