gpt4 book ai didi

c# - 如何将对象转换为动态类型?

转载 作者:行者123 更新时间:2023-11-30 19:29:08 27 4
gpt4 key购买 nike

我所有的对象都是由一个名为 GameObject 的抽象基类组成的.所有这些对象都继承自一个或多个接口(interface),例如 IRenderable , IAnimatable , IMovable

我还有一个存储为 List<GameObject> 的这些对象的列表.我正在尝试编写一个动态方法,它将向我返回从特定接口(interface)继承的所有对象,如下所示:

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。我是否遗漏了什么?还有其他方法可以实现我想要的吗?

最佳答案

LINQ 已经为您提供了一个非常方便的方法,OfType() .

List<GameObject> list = ...;
var movableObjects = list.OfType<IMovable>();

OfType将返回一个序列,其中包含输入序列中可以转换为您指定类型的所有项目。此外还有 Cast<T>()运算符,它只是尝试转换所有内容,如果无法转换某项,则会抛出异常(这似乎不是您想要的)。

关于c# - 如何将对象转换为动态类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13297855/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com