将字符串列表转换为抽象类类型的列表

问题描述 投票:0回答:1

我创建了一个带有重载构造函数的抽象类。我必须创建一个

CMember
类型的列表。我无法将字符串列表转换为
CMember
.

类型的列表

我试图在一个单独的类中创建一个列表,但我似乎无法弄清楚。我正在将文本文件中的数据检索到字符串列表中,我想将其添加到列表“成员”

//below is the abstract class I created
abstract class CMember
{
    public CMember(string name_)
    {
        name_ = Name; //I am also unsure whether I switched these the wrong way around
    }
    public string Name { get; private set; }
}


List<string> Data = new List<string>();
List<CMember> member = new List<CMember>();
while (!reader.EndOfStream)
{
    Data.Add(reader.ReadLine());
    
}
foreach (var item in Data)
{

    member.Add(item);
}
c# class type-conversion abstract-class
1个回答
2
投票

好吧,

List<CMember> member
是一个
CMember
的列表,所以我们必须创建
CMember
实例并将它们放入
member
列表:

foreach (var item in Data)
{
    // We must create CMember's from string
    // Doesn't compile, please see below
    member.Add(new CMember(item));
}

然而,问题出现了。你不能创建一个abstract class

的实例
(它是否有构造函数并不重要):

// Doesn't compile
new CMember("some name"); 

所以你要么把

CMember
变成一个非抽象的:

// If CMember is not abstract its instance can be created
class CMember { ... }

...

List<string> Data = new List<string>();

...

List<CMember> member = new List<CMember>(); 

foreach (var item in Data)
{
    // Here we can call CMember constructor
    member.Add(new CMember(item));
}

或者如果你想保持

CMember
abstract
你必须创建一些 具体 类的实例:

// Note, that MyCMember is not abstract
class MyCMember : CMember() {
  public MyCMember(string _name) : base(_name) {}
}

...

List<string> Data = new List<string>();

...

List<CMember> member = new List<CMember>(); 

foreach (var item in Data)
{
    // Note that we can create an instance of concrete class only: MyCMember
    member.Add(new MyCMember(item));
}
© www.soinside.com 2019 - 2024. All rights reserved.