我有一个清单
List <RootClass> classes = new List<RootClass>();
RootClass 是一个抽象类,我从中派生出另外两个类:SubClass1 和 SubClass2。在程序中,我通过以下方式创建新类:
classes.Add(new SubClass1(arg1, arg2));
classes.Add(new SubClass2(arg1, arg2));
假设现在我在类列表中有 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);
}
}
它适用于后一种解决方案,问题是,在我正在编写的程序中,我必须重复多次,每次修改不同的字段,以不同的方式,所以我的问题是有没有更深刻的方式来做到这一点?