【发布时间】:2016-05-16 21:40:59
【问题描述】:
自述文件优先
我有多种能力,每种能力都属于AbilityCategory 类型。
AbilityCategory 类型的示例有 AbilityCategory_Magic、AbilityCategory_Physical、AbilityCategory_Ranged、AbilityCategory_Biological 和列表继续……
AbilityCategories 是派生自 Ability 的类。
Ability 是一个只能实例化的类,AbilityBaseData 对象被传递到其构造函数中。
我想找到将每个能力链接到名为 defaultAbilityBaseDatabase 的 Dictionary 中的一个 AbilityBaseData 的方法。
在我的 defaultAbilityBaseDatabase 中,每个能力最多只能链接到 1 个 AbilityBaseData 实例。
-- AbilityBaseData.cs
[System.Serializable]
public class AbilityBaseData{
[SerializableField] Sprite abilityImage;
}
我目前的代码结构:
-- AbilityDatabase.cs
enum EAbilityCategory_Magic{
Fireball,
IceBolt,
BlackMagic
};
enum EAbilityCategory_Physical{
SwordLance,
FearlessBlow,
RagnarokRage
};
enum EAbilityCategory_Ranged{
Snipe,
RainOfArrows,
CrossbowShot
};
enum EAbilityCategory_Biological{
VirusUnleash,
SuperBug
};
enum Eblabla{};
enum Eevenmore{};
... There are many more abilities ...
...
Dictionary<EAbilityCategory_Magic,AbilityBaseData> defaultMagicAbilityBaseDataDatabase;
Dictionary<EAbilityCategory_Physical,AbilityBaseData> defaultPhysicalAbilityBaseDataDatabase;
Dictionary<EAbilityCategory_Ranged,AbilityBaseData> defaultRangedAbilityBaseDataDatabase;
Dictionary<EAbilityCategory_Biological,AbilityBaseData> defaultBiologicalAbilityBaseDataDatabase;
... list keeps going on...
代码结构查找:
-- AbilityDatabase.cs
enum class EAbility{}
enum EAbilityCategory_Magic : EAbility{
Fireball,
IceBolt,
BlackMagic
};
enum EAbilityCategory_Physical : EAbility{
SwordLance,
FearlessBlow,
RagnarokRage
};
enum EAbilityCategory_Ranged : EAbility{
Snipe,
RainOfArrows,
CrossbowShot
};
enum EAbilityCategory_Biological : EAbility{
VirusUnleash,
SuperBug
};
... There are many more abilities ...
...
Dictionary<EAbility,AbilityBaseData> defaultAbilityBaseDataDatabase;
这是我遇到此问题后尝试使用的解决方法
What variable type should I use to store types of a non sealed class or interface?
其中可能是这样的:
//I can remove all enumerations have such a clean, one-line code
Dictionary<typeof(Ability),AbilityBaseData> defaultAbilityBaseDataDatabase;
我无法像这样结合所有能力:
enum EAbility{
Fireball,IceBolt,BlackMagic,SwordLance,FearlessBlow,RagnarokRage,Snipe,.....
};
因为它会阻止我这样做:
-- MagicAbilityFactory.cs
AbilityCategory_Magic Create(EAbilityCategory_Magic magicAbilityCategory, AbilityBaseData defaultAbilityBaseData){
switch(magicAbilityCategory){
case Fireball:
return new AbilityCategory_Magic_Fireball(abilityBaseData,other parameters);
case blabla:
}
return null;
}
这可能是https://stackoverflow.com/posts/3460047/revisions 的一个选项,但问题是我宁愿找到一个干净的解决方案,它不需要我添加这么多行代码,因为我有成千上万的能力..
【问题讨论】:
-
像你继续做的那样乞求代表是不受欢迎的。有一些方法可以获得代表,并在您的问题中包括对赞成票的请求,不是吗。
标签: c# enums base-class