为什么这不能从我的文本文件中读取整数? 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()))
好的,所以我正在制作一个从文本文件中读取数据以创建事件的游戏。发生的事情是随着时间的推移,如果发生令人兴奋的事情,会出现一个包含三个选项的弹出框,单击它们会影响游戏等等。
我创建了一个函数,它可以接受各种参数并自动生成表单 - 到目前为止还不错 - 但是在代码中编写大型事件描述是混乱且无组织的。相反,我决定创建另一个函数,它从文本文件中获取值,组织它们,然后调用第二个函数来创建 '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()))