You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决C#读取CSV文件时的‘Invalid initializer member declarator’错误

问题解决与说明

错误原因分析

你遇到的两个错误均源于对象初始化器的语法使用错误:

  1. Invalid initializer member declarator:C#对象初始化器不支持直接在父类初始化器中嵌套赋值子对象的属性(比如Customers.Firstname = ...这种写法),语法规则要求要么直接给父类属性赋值,要么使用嵌套的对象初始化器。
  2. Collection initializer requires its type 'Reservation' to implement System.Collections.IEnumerable:编译器因错误的语法,误判你在尝试用集合初始化器创建Reservation实例,而Reservation未实现IEnumerable接口,因此触发该错误。

修正方案

你不需要在Reservation类中重复定义Customer和Voertuig的所有属性,只需正确初始化嵌套对象即可。以下是两种可行的修正方式:

方式1:使用嵌套对象初始化器

Reservation res = new Reservation
{
    Customers = new Customer
    {
        Firstname = fields[0],
        Lastname = fields[1],
        Age = int.Parse(fields[2]), // 根据实际属性类型做转换,注意异常处理
        Phonenumber = fields[3]
    },
    Vehicles = new Voertuig
    {
        Type = fields[4],
        Electric = bool.Parse(fields[5]), // 匹配Voertuig属性的类型
        RequiredAge = int.Parse(fields[6]),
        Wheels = int.Parse(fields[7]),
        PersonsCanRide = int.Parse(fields[8]),
        AllowedSpeed = int.Parse(fields[9])
    }
};

方式2:分开赋值(复用现有延迟初始化逻辑)

Reservation res = new Reservation();
res.Customers.Firstname = fields[0];
res.Customers.Lastname = fields[1];
res.Customers.Age = int.Parse(fields[2]);
res.Customers.Phonenumber = fields[3];
res.Vehicles.Type = fields[4];
// 依次赋值Voertuig的其他属性

额外优化建议

  • Create方法中的StreamWriter建议改用using语句自动释放资源,避免手动调用Close和Dispose:
using (StreamWriter sw = new StreamWriter(fullpath, true))
{
    var record = $"{Customers.Firstname};{Customers.Lastname};{Customers.Age};{Customers.Phonenumber};{Vehicles.Type};{Vehicles.Electric};{Vehicles.RequiredAge};{Vehicles.Wheels};{Vehicles.PersonsCanRide};{Vehicles.AllowedSpeed}";
    sw.WriteLine(record);
}
  • 读取文件时的类型转换(如int.Parse)建议改用int.TryParse等安全转换方法,避免因数据格式错误抛出异常。

内容的提问来源于stack exchange,提问作者emirzhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:03:19