我所有的对象都由一个名为GameObject
. 所有这些对象都继承自一个或多个接口,例如IRenderable
、IAnimatable
、IMovable
等。
我还有一个存储为List<GameObject>
. 我正在尝试编写一个动态方法,它将返回给我从特定接口继承的所有对象,如下所示:
List<IRenderable> renderableObjects = ObjectManager.GetAll<IRenderable>();
起初,我尝试只返回一个新的游戏对象列表,其中每个对象的类型都与动态类型匹配,然后将其转换List<GameObject>
为List<T>
. 我收到的编译器错误说我无法转换这些类型。
所以我的第二次尝试涉及单独投射每个对象,如下所示。
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。我错过了什么吗?还有另一种方法来完成我想要的吗?