将字符串列表转换为抽象类CMember类型列表的问题
问题解决方案
1. 构造函数赋值错误修正
你写的构造函数里name_ = Name完全写反了,正确逻辑是把传入的参数值赋值给类的属性,修正后代码:
public CMember(string name_) { Name = name_; }
name_是构造函数的输入参数,Name是类的属性,要把参数的值存入属性,而非反过来。
2. 抽象类无法直接实例化的问题
CMember是抽象类,不能直接创建实例,必须先定义一个继承自它的具体子类,比如:
// 继承抽象类的具体子类 class RegularMember : CMember { public RegularMember(string name) : base(name) { // 子类特有逻辑可在此添加,无需求则留空 } }
3. 字符串列表转CMember列表的修正
原代码直接将string类型的item添加到List<CMember>会报错,因为类型不匹配。需要通过子类创建实例后再添加:
修正后的完整代码示例:
abstract class CMember { public CMember(string name_) { Name = name_; // 修正赋值顺序 } public string Name { get; private set; } } // 新增具体子类 class RegularMember : CMember { public RegularMember(string name) : base(name) { } } // 读取文件并转换列表的逻辑 List<string> Data = new List<string>(); List<CMember> member = new List<CMember>(); while (!reader.EndOfStream) { string line = reader.ReadLine(); if (!string.IsNullOrEmpty(line)) // 过滤空行,避免无效数据 { Data.Add(line); // 直接创建子类实例并加入列表 member.Add(new RegularMember(line)); } } // 若需先存Data再转换,可改用以下逻辑: // foreach (var item in Data) // { // if (!string.IsNullOrEmpty(item)) // { // member.Add(new RegularMember(item)); // } // }
额外说明
- 抽象类的作用是作为基类,需子类继承后实现具体逻辑,因此必须通过子类创建实例。
- 空行判断是为了避免读取到文件末尾的无效空行,生成无名称的成员实例。
内容的提问来源于stack exchange,提问作者GooeyNomad
相关产品推荐
相关产品推荐

