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

将字符串列表转换为抽象类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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:45:45