2009-07-28 3 views
1

У меня есть перечисление флагов в сборке .NET, которая вызывается со страницы ASP.NET. Я хочу, чтобы шаг сборки Visual Studio генерировал файл .js, в котором есть эквивалент JavaScript. Есть ли инструменты для этого?Автоматический перевод перечисления C# на JavaScript


редактировать: Это похоже на работу.

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

Сценарий # пришло в голову. :-) – Nosredna

+0

Я бы добавил +1 к твоему редактированию, это был ответ. Это похоже на правильный инструмент для работы в программе UNIX. – Nenotlep

ответ

0

У меня недавно был успех, используя отражение на выходных сборных файлах для генерации кода.

Попробуйте использовать что-то вроде этого в консольном приложении вы можете позвонить с вашего процесса после сборки:

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

Почему бы не использовать 'Enum.GetValues ​​(myEnumType)' вместо? –

+0

Вы имеете в виду Enum.GetNames(). Да, это было бы проще в этом случае. Вопрос OP пытался использовать отражение, поэтому я дал метод доступа к значениям enum посредством отражения. – Paul

+0

^И BTW, вам все равно придется использовать отражение, чтобы получить тип перечисления в этом сценарии, так как вы загружаете внешнюю сборку для генерации кода. Это просто '.GetMembers(). Где (m => m.MemberType == MemberTypes.Field)', который будет заменен. – Paul