Ejemplo n.º 1
0
        public void Builder_Loop()
        {
            var c = new CodeDomGenerator();

            c.AddNamespace("Samples").AddClass(Define.Class("TestClass")
                                               .AddMethod(
                                                   Define.Method(MemberAttributes.Public | MemberAttributes.Static, typeof(int), (int a) => "Test",
                                                                 Emit.declare("res", () => 0),
                                                                 Emit.@for(
                                                                     "i",               //int i
                                                                     (int a) => a,      // = a
                                                                     (int i) => i < 10, //i<10
                                                                     (int i) => i + 1,  //i+=1
                                                                     Emit.assignVar("res", (int res) => res + 1)
                                                                     ), Emit.@return((int res) => res))
                                                   )
                                               .AddMethod(
                                                   Define.Method(MemberAttributes.Public | MemberAttributes.Static, typeof(int), (int a) => "Test1",
                                                                 Emit.declare("res", () => 0),
                                                                 Emit.@for("i", (int a) => a, (int i) => i < 10, () => CodeDom.VarRef <int>("i") + 2,
                                                                           Emit.assignVar("res", () => CodeDom.VarRef <int>("res") + 1)
                                                                           ), Emit.@return(() => CodeDom.VarRef <int>("res") + 100))
                                                   )
                                               );

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.CSharp));

            Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.VB));

            Assert.AreEqual(5, c.Compile().GetType("Samples.TestClass").GetMethod("Test")
                            .Invoke(null, new object[] { 5 }));

            Assert.AreEqual(103, c.Compile().GetType("Samples.TestClass").GetMethod("Test1")
                            .Invoke(null, new object[] { 5 }));
        }