![](/img/trans.png)
[英]c# Get if property type inherits from one abstract generic class with reflection
[英]C# type of generic class that inherits from abstract class
我正在努力寻找一种简单的方法来获取基于从抽象 class 继承的通用 class 的类型。
我有这个层次结构:
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)
但是这些并不像我想象的那样(显然抽象的 class 不起作用???)
typeof(Item<BaseItemData>)
typeof(Item<WearableItemData>)
我怎样才能让typeof(Item<WearableItemData>)
起作用? (可能是奥丁特定的??(编辑时间?))
为所有非通用的东西制作一个 class (或留空):
public class ItemBase : ScriptableObject
{
/* nothing, or non-generic stuff here */
}
然后,从它继承您现在拥有的通用项目:
public class Item<T> : ItemBase
{
/*...*/
}
然后,您可以使用tree.AddAllAssetsAtPath("TEMPLATES", "Assets/Scriptable/Templates", typeof(ItemBase));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.