如何写出派生类的内容列表

本文关键字:列表 何写出 派生 | 更新日期: 2023-09-27 18:35:26

我有一个列表

List <RootClass> classes = new List<RootClass>();

RootClass 是一个抽象类,我从中派生出另外两个类:SubClass1 和 SubClass2。在程序中,我通过以下方式创建新类:

classes.Add(new SubClass1(arg1, arg2));
classes.Add(new SubClass2(arg1, arg2));

假设现在我在类列表中有 20 个子类 1,20 个子类 2。例如,如何为列表中 SubClass1 的所有实例写出一个字段?

我试过了:

foreach(SubClass1 sc1 in classes){
    Console.WriteLine(sc1.field1);
}

但编译器似乎尝试强制转换列表中的每个对象,无论它是 SubClass1 类型还是 SubClass2,因此当它尝试使用 SubClass2 类型执行此操作时,它会引发强制转换异常。

我也做了:

foreach (RootClass rc in classes){
if (rc is Subclass1){
    SubClass1 sc1 = rc as SubClass1;
    ConsoleWriteLine(sc1.field1);
}
}

它适用于后一种解决方案,问题是,在我正在编写的程序中,我必须重复多次,每次都以不同的方式修改不同的字段,所以我的问题是有没有更深刻的方法做到这一点?

如何写出派生类的内容列表

var result = classes.OfType<subtype>();

您可以使用OfType扩展方法

foreach (var sub in classes.OfType<SubClass1>()) 
{
   Console.WriteLine(sub .field1);
}