私はリストを持っています
List <RootClass> classes = new List<RootClass>();
RootClass は、SubClass1 と SubClass2 という 2 つの他のクラスを派生させる抽象クラスです。プログラムでは、次の方法で新しいクラスを作成します。
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);
}
}
後者のソリューションで問題なく動作します。問題は、私が書いているプログラムでは、これを何度も繰り返さなければならず、毎回異なるフィールドをさまざまな方法で変更する必要があるため、私の質問はこれを行うためのより深い方法があるかどうかです。 ?