0

次の状況があります

ジェネリック クラス:

public class A {
...
}

and two clases:

public class B: A {
...
}

public class C: A {
...
}

コードの一部で、次のようなことをしたい (リストは以前に入力されています):

foreach (A item in list) {
   listB.add((B) item);
}

それは可能ですか?ジェネリックアイテムのリストを、ジェネリッククラスを拡張するクラスのリストにバインドしたいだけです。

ありがとう

4

2 に答える 2

1

これからの解決策は、A のインスタンスを取り、そこから B を構築する B のコンストラクタを作成するか、同様に、A のインスタンスを提供できる B の静的メソッドを作成することです。 A のインスタンスです。どちらも理想的ではありません。

しようとしていることができない理由は、B が A のサブクラスであるためです。したがって、B は A の必要なすべてのプロパティとメソッドを持ち、A のインスタンスであるかのように扱うことができます。しかし、A はそうしますB に必要なすべてのプロパティとメソッドを持っているわけではないため、タイプ B のオブジェクトであるかのように扱うことはできません。

ただし、コメントの1つで述べたように、タイプBとしてキャストしようとしているアイテムが実際にタイプBの場合、コードは機能します。

于 2013-07-04T08:44:24.103 に答える