解决C#读取CSV文件时的‘Invalid initializer member declarator’错误
问题解决与说明
错误原因分析
你遇到的两个错误均源于对象初始化器的语法使用错误:
Invalid initializer member declarator:C#对象初始化器不支持直接在父类初始化器中嵌套赋值子对象的属性(比如Customers.Firstname = ...这种写法),语法规则要求要么直接给父类属性赋值,要么使用嵌套的对象初始化器。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
相关产品推荐
相关产品推荐

