private static void MakeTupleWithNArgs(int n)
        {
            var createGeneric = typeof(Tuple).GetMethods().Where(m => m.Name == "Create" && m.GetGenericArguments().Length == n).First();

            Assert.IsNotNull(createGeneric);
            var createMethod = createGeneric.MakeGenericMethod(Enumerable.Range(0, n).Select(i => typeof(int)).ToArray());

            Assert.IsNotNull(createMethod);

            var i1 = Expression.Constant(10);
            var i2 = Expression.Constant(20);

            var args       = Enumerable.Range(0, n).Select(i => Expression.Constant(i * 10)).ToArray();
            var methodExpr = Expression.Call(null, createMethod, args);

            Assert.IsNotNull(methodExpr);

            var t = new CreateTupleExpressionTransformer();
            var r = t.Transform(methodExpr);

            Assert.IsInstanceOfType(r, typeof(NewExpression), "expression type");
            var ne = r as NewExpression;

            Assert.AreEqual(n, ne.Arguments.Count, "# of arguments to the new expression");
            Assert.IsTrue(args.Zip(ne.Arguments, (f, s) => f == s).All(ty => true), "args are the same");

            Assert.AreEqual(string.Format("Tuple`{0}", n), ne.Type.Name);
            var ga = ne.Type.GetGenericArguments();

            Assert.AreEqual(n, ga.Length, "# of generic arguments to the type");
            Assert.IsTrue(ga.All(ty => ty == typeof(int)), "all type ");
        }
        private static void MakeTupleWithNArgs(int n)
        {
            var createGeneric = typeof(Tuple).GetMethods().Where(m => m.Name == "Create" && m.GetGenericArguments().Length == n).First();
            Assert.IsNotNull(createGeneric);
            var createMethod = createGeneric.MakeGenericMethod(Enumerable.Range(0, n).Select(i => typeof(int)).ToArray());
            Assert.IsNotNull(createMethod);

            var i1 = Expression.Constant(10);
            var i2 = Expression.Constant(20);

            var args = Enumerable.Range(0, n).Select(i => Expression.Constant(i * 10)).ToArray();
            var methodExpr = Expression.Call(null, createMethod, args);
            Assert.IsNotNull(methodExpr);

            var t = new CreateTupleExpressionTransformer();
            var r = t.Transform(methodExpr);

            Assert.IsInstanceOfType(r, typeof(NewExpression), "expression type");
            var ne = r as NewExpression;
            Assert.AreEqual(n, ne.Arguments.Count, "# of arguments to the new expression");
            Assert.IsTrue(args.Zip(ne.Arguments, (f, s) => f == s).All(ty => true), "args are the same");

            Assert.AreEqual(string.Format("Tuple`{0}", n), ne.Type.Name);
            var ga = ne.Type.GetGenericArguments();
            Assert.AreEqual(n, ga.Length, "# of generic arguments to the type");
            Assert.IsTrue(ga.All(ty => ty == typeof(int)), "all type ");
        }