我正在使用CSVHelper,虽然这似乎与我所知的手动方法有关。
我正在尝试使用csv文件创建某种形式的“保存数据”系统,该系统将存储需要在正在运行的程序上加载的所有重要变量。这是我的代码,带有通用变量名:
StringReader csv = new StringReader(SaveData);
var load = new CsvReader(csv);
string convertableString = "";
load.Read();
convertableString = load.GetField(0);
day = Convert.ToInt32(convertableString);
numberOfObjects = load.GetField<int>(1);
for (int i = 0; i < numberOfObjects; i++)
{
load.Read();
myObject[i].objName = load.GetField(0);
myObject[i].objBool = load.GetField<bool>(1);
myObject[i].objInt = load.GetField<int>(2);
}
将字符串转换为其他变量类型的行会触发以下错误:
System.FormatException: 'Input string was not in a correct format.'
具体来说,抛弃它的第一行是:
day = Convert.ToInt32(convertableString);
这也适用于CSV Helper的转换方法,但这样就行了(注意这需要删除它上面的行):
day = load.GetField<int>(0);
为了简单起见,我正在显示两种转换方法,并且都返回此(在尝试转换任何内容时,是“day”是一个int)
我的CSV文件看起来像 this :
2,1,
Name, True, 45
我没有声称拥有最好的编码知识,但我已经到了那里,虽然我无法确切地看到究竟出了什么问题,这甚至不是我第一次阅读csv文件而且我已经从来没有经历过这样的事情。
答案 0 :(得分:0)
我已经找到了解决方案,首先声明了csvReader错误,它应该被这个包围:
using (TextReader fileReader = File.OpenText(saveData))
{
var load = new CsvReader(fileReader);
\\\Rest of code here\\\
}
原始代码所做的是将文件路径发送到CsvReader而不是实际文件,这意味着第一个字段设置为文件路径,没有其他数据存在。原始代码试图将文件路径转换为整数,这导致它崩溃。这完全解决了这个问题。
在这个特定场景中(加载加载程序的数据),初始化类也很重要,因此为此添加一行也可以防止崩溃。