【发布时间】:2012-06-16 01:19:18
【问题描述】:
所以我在 XNA、C# 4.0 中创建一个游戏,我需要管理很多 PowerUps(在代码中它们都继承自类“PowerUp”),并处理 PowerUps 的后端管理我当前有一个枚举 PowerupEffectType,它为 PowerUp 的每个子类都有一个值。最终在代码中,我需要将 PowerupEffectType 转换为 Powerup 类型(Type 类,通常使用typeof([class name]) 实现)。
由于这是一个小组项目,我想尽可能地将 PowerupEffectType 的每个值与其对应的类 Type 结合起来,即:不只是期望我的其他程序员使用 switch 语句手动进行转换,并确保添加/expansions 稍后会在尽可能少的地方进行尽可能少的更改。我有几个选择,到目前为止我发现的最好的方法是创建枚举伪方法,将所有内容压缩为一个 switch 语句(我想要的 99%),这要归功于我在这里找到的一些技巧:@ 987654321@
但我正试图更进一步 - 我可以将 Type 保存在 enum 中吗? 我知道您可以将枚举保存为特定类型(链接:@987654322 @),但Type 不是其中之一。当前的选择是 byte、sbyte、short、ushort、int、uint、long 和 ulong。是否有任何可行的方法可以将 Type 转换为上述任何数据类型并返回?
明确一点,这是我希望我能做到的,我正在寻找一种方法:
// (Assuming 'LightningPowerup', 'FirePowerup', and 'WaterPowerup' are
// all declared classes that inherit from a single base class)
public enum PowerupEffectType
{
LIGHTNING = typeof(LightningPowerup),
FIRE = typeof(FirePowerup),
WATER = typeof(WaterPowerup)
}
有什么办法可以做到这一点,还是我只是将一个已经完成 99% 的问题的解决方案过于复杂化了?
提前致谢!
【问题讨论】:
-
我不知道你想在这里完成什么作为你的最终目标,但它闻起来就像你应该使用虚拟方法而不是打开枚举来完成的事情。通常,您想要从枚举中获取类型的原因是枚举是否来自外部源,可能是数据库。但是,在这种情况下,您可能希望您的 switch 块实例化 powerup 类型,而不是为您提供相应的类对象。
标签: c# types enums type-conversion