2009-07-28 10 views
1

J'ai une énumération de drapeaux dans un assembly .NET qui est appelé à partir d'une page ASP.NET. Je veux avoir une étape de construction Visual Studio générer un fichier .js qui a l'équivalent JavaScript dans celui-ci. Y a-t-il des outils pour le faire?Traduction automatique de C# enum en JavaScript


modifier: Cela semble fonctionner.

public class JavaScriptReflection 
{ 
    public static string Go(Type type) 
    { 
     if (!type.IsEnum) return; 

     StringBuilder sb = new StringBuilder(); 
     sb.AppendFormat("var {0} = {{ ", type.Name); 

     foreach (FieldInfo fInfo in 
      type.GetFields(BindingFlags.Public | BindingFlags.Static)) 

      sb.AppendFormat("{0}:{1},\r\n", 
       fInfo.Name, 
       fInfo.GetRawConstantValue().ToString()); 

     sb.Append("};"); 
     return sb.toString(); 
    } 
} 
+1

Le numéro de script est venu à l'esprit. :-) – Nosredna

+0

Je voudrais +1 vous l'éditez c'était une réponse. Il semble que ce soit le bon outil pour le travail dans un programme UNIX. – Nenotlep

Répondre

0

J'ai eu récemment du succès en utilisant la réflexion sur les fichiers d'assemblage de sortie pour générer du code.

Essayez d'utiliser quelque chose comme ça dans une application de la console, vous pouvez appeler à partir de votre processus de post-construction:

Assembly assembly = Assembly.LoadFile("FileName"); 
Type myEnumType = assembly.GetType("EnumName"); 
foreach(MemberInfo mi in myEnumType.GetMembers().Where(m => m.MemberType == MemberTypes.Field)) 
     Console.WriteLine(mi.Name); 
+0

Pourquoi ne pas utiliser 'Enum.GetValues ​​(myEnumType)'? –

+0

Vous voulez dire Enum.GetNames(). Oui, ce serait plus simple dans ce cas. La question OP essayait cependant d'utiliser la réflexion, alors j'ai donné la méthode d'accès aux valeurs enum par réflexion. – Paul

+0

^Et BTW, vous devez toujours utiliser la réflexion pour obtenir le type enum dans ce scénario puisque vous chargez un assembly externe pour générer du code. C'est juste le '.GetMembers(). Où (m => m.MemberType == MemberTypes.Field)' qui serait remplacé. – Paul