none
CodeDom初始化数组 RRS feed

  • 问题

  • 我用Code生成并初始化一个byte数组字段,最终生成的代码是这个样子

    private byte[] _data = new byte[] {
                    123,
                    48,
                    52,
                    70,
                    69,
                    57,
                    48,
                    49,
                    55,
                    45,
                    70,
       ......

     

    当数组中数据量越大时,占用文件的行数就越多。

    我想生成下面样子的数据,要怎么做?

    private byte[] _data = new byte[] {
                    123, 48, 52, 70, 69, 57, 48, 49, 55,
                    45, 70, ......

    2010年6月12日 9:02

答案

  • 你好 貌似没有这个选项 我这里有个笨的方法:

    private static void TestCodeDom()
            {
                CodeArrayCreateExpression data = new CodeArrayCreateExpression(typeof(byte));
                data.Initializers.AddRange(new CodeExpression[]{
                new CodePrimitiveExpression(123),new CodePrimitiveExpression(48),new CodePrimitiveExpression(52),new CodePrimitiveExpression(70),new CodePrimitiveExpression(69)
                });

                CodeVariableDeclarationStatement varData = new CodeVariableDeclarationStatement("System.byte[]", "_data", data);
                CSharpCodeProvider provider = new CSharpCodeProvider();
                StringBuilder sb = new StringBuilder();
                CodeGeneratorOptions o = new CodeGeneratorOptions();
                o.BlankLinesBetweenMembers = false;
                provider.GenerateCodeFromStatement(varData, new StringWriter(sb), o);

                string code = sb.ToString();
                Console.Write(code.Replace("\r\n","").Replace("  ",""));
            }

    2010年6月14日 9:29
    版主

全部回复

  • 你好 貌似没有这个选项 我这里有个笨的方法:

    private static void TestCodeDom()
            {
                CodeArrayCreateExpression data = new CodeArrayCreateExpression(typeof(byte));
                data.Initializers.AddRange(new CodeExpression[]{
                new CodePrimitiveExpression(123),new CodePrimitiveExpression(48),new CodePrimitiveExpression(52),new CodePrimitiveExpression(70),new CodePrimitiveExpression(69)
                });

                CodeVariableDeclarationStatement varData = new CodeVariableDeclarationStatement("System.byte[]", "_data", data);
                CSharpCodeProvider provider = new CSharpCodeProvider();
                StringBuilder sb = new StringBuilder();
                CodeGeneratorOptions o = new CodeGeneratorOptions();
                o.BlankLinesBetweenMembers = false;
                provider.GenerateCodeFromStatement(varData, new StringWriter(sb), o);

                string code = sb.ToString();
                Console.Write(code.Replace("\r\n","").Replace("  ",""));
            }

    2010年6月14日 9:29
    版主
  • 输出结果

    byte[] _data = new byte[] {123,48,52,70,69};


    I see you~http://hi.baidu.com/1987raymondMy Blog~~~
    2010年6月14日 9:31
    版主