Ist es möglich, speichern Sie eine Typ (mit "typeof()") in einem enum?

So, ich bin momentan dabei, ein Spiel in XNA, C# 4.0, und ich brauchen, um zu verwalten eine Menge von Power-UPS (die im code sind alle geerbt von der Klasse "PowerUp"), und mit back-end-management von der Power-UPS im Moment habe ich ein enum, PowerupEffectType, mit einem Wert für jede Kind-Klasse von PowerUp. Schließlich der code, den ich brauche, um Konvertierungen aus PowerupEffectType, um die Powerup-Typ (der Klasse Type, erzielt in der Regel mit typeof([class name])).

Da diese Gruppe ist ein Projekt, das ich heiraten will, jeder Wert PowerupEffectType seiner entsprechenden Klasse, die Geben so gut wie möglich, d.h.: Nicht nur erwarten, dass meine andere Programmierer verwenden Sie switch-Anweisungen, um die Konvertierung manuell, und sicherstellen, dass Ergänzungen/Erweiterungen später mit einbeziehen, so wenige änderungen in so wenigen Orten wie möglich. Ich habe ein paar Optionen für diese, und die beste, die ich entdeckt habe, so weit ist das erstellen enum pseudo-Methoden, die alles verdichten zu einer einzigen switch-Anweisung (99% von dem, was ich will), Dank einiger Tipps habe ich hier gefunden: http://msdn.microsoft.com/en-us/library/bb383974.aspx

Aber ich versuche, mich zu nehmen es ein Schritt weiter - kann ich sparen Type in einem enum? Ich weiß, Sie können speichern Enumerationen, die als ein bestimmter Typ (link: http://msdn.microsoft.com/en-us/library/cc138362.aspx), aber Type ist nicht einer von Ihnen. Die aktuellen Entscheidungen sind byte, sbyte, short, ushort, int, uint, long und ulong. Gibt es eine praktikable Möglichkeit, zu sparen konvertieren Type einem der oben genannten Datentypen und zurück?

Nur klar zu sein, das ist, was ich WÜNSCHTE, ich könnte tun, und ich bin auf der Suche nach einem Weg, das zu tun:

//(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)
}

Gibt es eine Möglichkeit, dies zu tun, oder bin ich einfach nur overcomplicating eine Lösung zu einem problem, das bereits zu 99% abgeschlossen?

Vielen Dank im Voraus!

  • Ich weiß nicht, was Sie versuchen zu erreichen, hier, wie Ihr Ultimatives Ziel, aber es riecht wie etwas, das Sie sollten erreichen können, die mit einer virtuelle Methode statt der Umstellung auf ein enum. In der Regel der Grund, warum Sie wollen würde, um zu bekommen eine Art von enum, als Sie tun, ist, wenn die enum-kommt von einer externen Quelle, wahrscheinlich die DB. Aber in diesem Fall möchten Sie wahrscheinlich Ihre switch-block zu instanziieren des powerup geben, anstatt Ihnen die entsprechende class-Objekt.
InformationsquelleAutor KeithA45 | 2012-06-13
Schreibe einen Kommentar