1

私はリストを持っています

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);
}
}

後者のソリューションで問題なく動作します。問題は、私が書いているプログラムでは、これを何度も繰り返さなければならず、毎回異なるフィールドをさまざまな方法で変更する必要があるため、私の質問はこれを行うためのより深い方法があるかどうかです。 ?

4

2 に答える 2