【发布时间】:2023-04-08 09:22:01
【问题描述】:
我正在编写一个脚本,我可以提供各种对象并告诉它以各种方式修改它们。这适用于许多类型,但我不知道如何处理列表(和其他集合)。 这不起作用:
List<Transform> transformList = new List<Transform>();
void MyFunction( object o ) {
if( o.GetType() == typeof( int ) DoIntStuff(); //Easy
else if( o.GetType() == typeof( Color ) DoColorStuff(); //Also Easy
else if( o.GetType() == typeof( List<> ) ) DoListStuff(); //Not as easy :(
}
void Start() {
MyFunction( transformList );
}
我做不到
typeof( List<T> )
因为那里当然不存在 T。
typeof( List<object> )
也不行。
那么我怎样才能知道我所拥有的是否是任何类型的列表呢?
【问题讨论】:
-
我必须直截了当,你在那里做的事情不好。为什么需要MyFunction,不能直接调用DoInt/Color/ListStuff吗?
-
这是一个过于简单的例子。在实际脚本中,我可以放入任何游戏对象,它通过反射获取所有组件上的所有字段,然后脚本过滤它们并根据它在其 UI 中的设置方式修改值。
-
因为它是一个编辑器脚本,你还不如有一个用于拖动的插槽和一个用于类型的下拉菜单。然后你有一个字典 Enum、Action 并根据所选的枚举类型调用操作。如果一个类型可以是两个,那么检查类型的想法可能会导致问题。假设您最终检查了 Dog 和 Animal。您的 if 订单也必须考虑这一点。你会遇到很多麻烦。