![](/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.