好的,所以我正在创建一个从文本文件中读取数据以创建事件的游戏。如果出现令人兴奋的事情,每年都有进展,会出现一个带有三个选项的弹出框,点击它们会影响游戏,等等。
我创建了一个可以采用各种参数并自动生成表单的函数 - 到目前为止一直很好 - 但是在代码中编写大型事件描述是混乱和混乱的。相反,我决定创建另一个函数,它从文本文件中获取值,组织它们然后调用第二个函数来创建'事件'。
现在,正如我所说,每个事件都有三个选择(见下文),每个选择都有三个因素(批准,声望,权力)之一的结果,我还没有完全理解机制,但所有的好的时候,一切都运行得非常好,直到我需要从文本文件加载这个整数。
在将字符串转换为整数时遇到问题,为什么会这样,我该如何解决呢?
文本文件的第11行:10(是的,我检查过,它是正确的行)
代码:
List<int> affecta = new List<int>();
affecta.Add(Int32.Parse(System.IO.File.ReadLines(filename).Take(11).First()))
我可以完美地加载其他内容,例如图片文件的位置,因此'filename'指向正确的.txt
对于有更多经验的人来说,这可能是非常明显的,但我只是看不出原因。
答案 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()))