Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#enum到JavaScript的自动翻译_C#_Javascript_Asp.net_Reflection_Code Translation - Fatal编程技术网

C#enum到JavaScript的自动翻译

C#enum到JavaScript的自动翻译,c#,javascript,asp.net,reflection,code-translation,C#,Javascript,Asp.net,Reflection,Code Translation,我在从ASP.NET页面调用的.NET程序集中有一个标志枚举。我想让Visual Studio构建步骤生成一个.js文件,该文件中包含与JavaScript等效的内容。有什么工具可以做这件事吗 编辑:这似乎有效 public class JavaScriptReflection { public static string Go(Type type) { if (!type.IsEnum) return; StringBuilder sb =

我在从ASP.NET页面调用的.NET程序集中有一个标志枚举。我想让Visual Studio构建步骤生成一个
.js
文件,该文件中包含与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();
    }
}

我最近成功地使用输出程序集文件上的反射来生成代码

尝试在控制台应用程序中使用类似的内容,您可以通过后期生成过程调用该应用程序:

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);

我最近成功地使用输出程序集文件上的反射来生成代码

尝试在控制台应用程序中使用类似的内容,您可以通过后期生成过程调用该应用程序:

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);

是一件需要调查的事情。

是一件需要调查的事情。

我会+1你编辑它,这是一个答案。在UNIX程序中,它似乎是适合这项工作的工具。我希望你能编辑它,这是一个答案。在UNIX程序中,它似乎是执行此任务的合适工具。为什么不使用
Enum.GetValues(myEnumType)
来代替呢?您指的是Enum.GetNames()。是的,在这种情况下会更简单。OP问题试图使用反射,因此我给出了通过反射访问枚举值的方法。^顺便说一句,在这种情况下,您仍然必须使用反射来获取枚举类型,因为您正在加载外部程序集以生成代码。将被替换的只是
.GetMembers()。其中(m=>m.MemberType==MemberTypes.Field)
。对于加载类型的前两行,我没有任何参数(这就是为什么我使用了与您编写的相同的变量名)。您应该使用
Enum.GetNames
Enum.GetValues
而不是该foreach。如果您同时需要名称和值(在大多数情况下),
Enum.GetNames
将导致对每个名称使用
Enum.Parse
,但是通过使用
Enum.GetValues
,您可以将名称(
.ToString()
)和值放在一起,这取决于生成的代码。您可能需要这些值,但我建议不要使用URL参数,因为整型值可读性较差。您可以通过MemberInfo获得更多的数据。使用反射生成代码时,通常还需要查看自定义属性,例如,使用
System.ComponentModel.DescriptionAttribute
可以拉一个标签显示给用户--这是我从web客户端的枚举生成代码时经常做的事,您不能使用任何
Enum
静态方法。为什么不改用
Enum.GetValues(myEnumType)
呢?您指的是Enum.GetNames()。是的,在这种情况下会更简单。OP问题试图使用反射,因此我给出了通过反射访问枚举值的方法。^顺便说一句,在这种情况下,您仍然必须使用反射来获取枚举类型,因为您正在加载外部程序集以生成代码。将被替换的只是
.GetMembers()。其中(m=>m.MemberType==MemberTypes.Field)
。对于加载类型的前两行,我没有任何参数(这就是为什么我使用了与您编写的相同的变量名)。您应该使用
Enum.GetNames
Enum.GetValues
而不是该foreach。如果您同时需要名称和值(在大多数情况下),
Enum.GetNames
将导致对每个名称使用
Enum.Parse
,但是通过使用
Enum.GetValues
,您可以将名称(
.ToString()
)和值放在一起,这取决于生成的代码。您可能需要这些值,但我建议不要使用URL参数,因为整型值可读性较差。您可以通过MemberInfo获得更多的数据。使用反射生成代码时,通常还需要查看自定义属性,例如,使用
System.ComponentModel.DescriptionAttribute
可以拉一个标签显示给用户--这是我从web客户端的枚举生成代码时经常做的事,您不能使用任何
Enum
静态方法。