c# - 继承自抽象类的泛型类的 C# 类型
问题描述
我正在努力寻找一种简单的方法来获取基于从抽象类继承的泛型类的类型。
我有这个层次结构:
public abstract class BaseItemData {}
public abstract class WearableItemData : BaseItemData {}
----
public class EquipmentItemData : WearableItemData {}
public class WeaponItemData : WearableItemData {}
----
public class Item<T> : ScriptableObject {}
public class EquipmentItem : Item<EquipmentItemData> { }
public class WeaponItem : Item<WeaponItemData> { }
有了这个,我想在编辑时获得所有 Scriptable Objects Assets。我正在使用 Odin Inspector 构建自定义编辑器,并希望将所有类型的资产添加Item
到树中,但我不能这样做,因为需要传递给的泛型类型Item
protected override OdinMenuTree BuildMenuTree() {
OdinMenuTree tree = new OdinMenuTree();
// THIS WORKS
tree.AddAllAssetsAtPath("TEMPLATES/Weapons", "Assets/Scriptable/Templates", typeof(WeaponItem));
tree.AddAllAssetsAtPath("TEMPLATES/Equipment", "Assets/Scriptable/Templates", typeof(EquipmentItem));
// BUT I WOULD LIKE TO HAVE SOMETHING MORE LIKE THIS
tree.AddAllAssetsAtPath("TEMPLATES", "Assets/Scriptable/Templates", typeof(Item)); // or typeof(Item<WearableItemData>)
return tree;
}
这些作品
typeof(Item<WeaponItemData>)
typeof(Item<EquipmentItemData>)
typeof(WeaponItem)
typeof(EquipmentItem)
但是这些不像我想的那样(显然抽象类不起作用???)
typeof(Item<BaseItemData>)
typeof(Item<WearableItemData>)
我怎样才能做到typeof(Item<WearableItemData>)
这一点?(可能是奥丁特定的??(编辑时间?))
解决方案
为所有非通用的东西创建一个类(或者留空):
public class ItemBase : ScriptableObject
{
/* nothing, or non-generic stuff here */
}
然后,从它继承您现在拥有的通用项目:
public class Item<T> : ItemBase
{
/*...*/
}
然后,您可以使用tree.AddAllAssetsAtPath("TEMPLATES", "Assets/Scriptable/Templates", typeof(ItemBase));
推荐阅读
- reactjs - Jest 和酶测试功能组件:返回 JSX 的方法
- css - 情感不会覆盖 Material UI 默认值
- reactjs - React - Material UI 测试 TypeError:无法读取未定义的属性“获取”
- amazon-web-services - 如何在不使用托管 UI 的情况下使用 Postman 使用 AWS cognito 注册新用户
- c++ - 有没有办法调用对象的重写基类方法?
- ios - Xcode 12.4 中的模拟器很慢
- javascript - 需要帮助来跟踪更高或更低 HTML 的猜测
- javascript - Reactstrap 表头和表体不匹配
- openlayers - openweathermaps 天气图图层未在 openlayers 上正确显示
- php - Xdebug with VSCode for PHP CLI 不附加