すべてのオブジェクトは、 と呼ばれる基本抽象クラスから構成されていますGameObject
。これらのオブジェクトはすべて、IRenderable
、IAnimatable
、などの 1 つまたは複数のインターフェイスから継承しますIMovable
。
として保存されているこれらのオブジェクトのリストもありますList<GameObject>
。次のように、特定のインターフェイスから継承したすべてのオブジェクトを返す動的メソッドを作成しようとしています。
List<IRenderable> renderableObjects = ObjectManager.GetAll<IRenderable>();
最初は、各オブジェクトの型が動的型と一致するゲーム オブジェクトの新しいリストを返すだけにして、 を にキャストしてList<GameObject>
みましたList<T>
。私が受け取ったコンパイラ エラーは、これらの型を変換できないことを示していました。
2 回目の試みでは、以下に示すように、各オブジェクトを個別にキャストしました。
public List<T> GetAll<T>() {
List<T> list = new List<T>();
foreach( GameObject obj in this.gameObjects )
if( obj is T )
list.Add( (T)obj );
return list;
}
ただし、これは同じタイプのエラーをスローします。タイプ GameObject を T に変換できません。何か不足していますか? 私が望むことを達成する別の方法はありますか?