我有一个清单

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


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

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


可以说,现在我在类List中有20个SubClass1,还有20个SubClass2。
例如,如何为列表中的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);
}
}


它在后一种解决方案中可以很好地工作,问题是,在我编写的程序中,我必须重复多次,每次以不同的方式修改不同的字段,所以我的问题是是否有更深远的方法?

最佳答案

您可以使用OfType扩展方法

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

10-07 16:14