2008-12-05 5 views
1

suppose que j'ai un ENUMce qui est l'équivalent d'exécution de C# type 'crochets' fonte

[Flags] 
public enum E { 
    zero = 0, 
    one = 1 
} 

alors je peux écrire

E e; 
object o = 1; 
e = (E) o; 

et cela fonctionnera.

mais si je tente de le faire lors de l'exécution, comme

(o as IConvertible).ToType(typeof(E), null) 

il jeter InvalidCastException.

Donc, y a-t-il quelque chose que je puisse invoquer à l'exécution, et qui va passer de int32 à enum, de la même manière que si j'avais écrit un cast comme ci-dessus? Comment la variable ressemble-t-elle à celle dans laquelle vous enregistrez le résultat de cette conversion?

+0

méta - Étant donné que ce Q ne traite que des énumérations proposer quelqu'un ajouter 'enum' au titre et/ou tags. –

Répondre

4
 

object o = 1; 
object z = Enum.ToObject(typeof(E), o); 
 
+0

Voilà, MERCI! – artem

0

C'est à dire. avec quel type le déclarez-vous?

Si vous voulez avoir une variable d'objet, faites-le. Au lieu de null, utilisez Activator.CreateInstance pour créer une instance par défaut de l'ENUM:

object o = Activator.CreateInstance(typeof(E)); 
+0

Je veux que ce soit Object. C'est, enumée en boîte. Le fait est que le type n'est pas connu au moment de la compilation, donc je ne veux pas déclarer une variable 'destination' avec le type exact. – artem

+0

Je vois votre problème maintenant. Cela n'a rien à voir avec le casting, comme le montre mon code. Le problème est plutôt la création d'une instance basée sur un type d'exécution. –

+0

Non. Le problème n'a rien à voir avec la création d'objets. J'ai une valeur entière, qui vient, disons, du fichier xml. Le problème est: comment l'attribuer à cet objet? (encore une fois, le type E réel vient en tant que paramètre Type et n'est pas connu au type de compilation, donc je ne peux pas écrire une distribution) – artem

0

Vous pouvez également utiliser

Enum.Parse(typeof(E), (int)o) 
Questions connexes