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

时间:2015-09-18 20:16:44

标签: c# integer text-files

好的,所以我正在创建一个从文本文件中读取数据以创建事件的游戏。如果出现令人兴奋的事情,每年都有进展,会出现一个带有三个选项的弹出框,点击它们会影响游戏,等等。

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

现在,正如我所说,每个事件都有三个选择(见下文),每个选择都有三个因素(批准,声望,权力)之一的结果,我还没有完全理解机制,但所有的好的时候,一切都运行得非常好,直到我需要从文本文件加载这个整数。

在将字符串转换为整数时遇到问题,为什么会这样,我该如何解决呢?

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

代码:

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

我可以完美地加载其他内容,例如图片文件的位置,因此'filename'指向正确的.txt

对于有更多经验的人来说,这可能是非常明显的,但我只是看不出原因。

3 个答案:

答案 0 :(得分:4)

我不认为Take会按照您的想法行事 - 它抓住前11个项目并返回所有,因此您得到的IEnumerable为11个项目。当你对First进行操作时,你会得到位置0的项目,而不是位置10.我认为你想要Skip然后First,这将跳过前10个项目然后返回下一个项目(第11项)项目:

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

答案 1 :(得分:2)

如果您使用Take(11),则表示“从源中获取11行”。之后你有First(),所以你会先得到它们。您实际上是在尝试将第一行转换为整数。

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

答案 2 :(得分:0)

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

相反,跳过前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()))