c# - 从 CSV 读取,类型转换错误

c# - Reading From CSV, Type Conversion Error

我正在使用 CSVHelper,尽管这似乎是通过我所知道的手动方法实现的。

我正在尝试使用 csv 文件创建某种形式的 "save data" 系统,它将存储需要在程序 运行 上加载的所有重要变量。这是我的带有通用变量名的代码:

        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);

为了简单起见,我展示了两种转换方法和 return 这个(在尝试转换任何东西时,是的 "day" 是一个 int)

我的 CSV 文件看起来像 这个:

2,1,
Name, True, 45

我并没有声称自己拥有最好的编码知识,但我已经达到了,虽然我真的看不出到底出了什么问题,这甚至不是我第一次阅读 csv 文件而且我以前从未经历过这样的事情。

后来我找到了解决办法,首先csvReader被声明错误,它应该被这样包围:

using (TextReader fileReader = File.OpenText(saveData))
{
    var load = new CsvReader(fileReader);

    \\Rest of code here\\

}

原始代码所做的是将文件路径发送到 CsvReader 而不是实际文件,这意味着第一个字段被设置为文件路径,没有其他数据存在。原始代码试图将文件路径转换为整数,这导致它崩溃。这完全解决了这个问题。

在这种特定情况下(在加载程序时加载数据)初始化您的 类 也很重要,因此为此添加一行也可以防止崩溃。