public static NewExpression New(ConstructorInfo constructor, Expression[] arguments) { var Type = default(Type); if ((object)constructor != null) Type = constructor.DeclaringType; // X:\jsc.svn\examples\javascript\LINQ\test\auto\TestSelect\JVMCLRSyntaxOrderByThenGroupBy\Program.cs //Console.WriteLine("Expression.New " + new //{ // constructor, // Type // //, constructor.DeclaringType //}); // method: System.Linq.Expressions.NewExpression New(System.Reflection.ConstructorInfo, System.Linq.Expressions.Expression[]) // X:\jsc.svn\examples\javascript\forms\Test\TestSQLiteGroupBy\TestSQLiteGroupBy\ApplicationWebService.cs return (NewExpression)(object) new __NewExpression { NodeType = ExpressionType.New, Constructor = constructor, Type = Type, Arguments = new global::System.Collections.ObjectModel.ReadOnlyCollection<Expression>(arguments.ToList()), Members = new global::System.Collections.ObjectModel.ReadOnlyCollection<MemberInfo>(new MemberInfo[0].ToList()), }; }
Expression dynamicInvoke(Expression delegateExpr, Expression[] args) { var targetArgExprs = args.ToList(); targetArgExprs.Insert(0, delegateExpr); return createCallSiteInvokeTarget( "CreateInvokeBinder", new [] { getNewCallInfoExpr(args.Length) }, targetArgExprs.ToArray()); }
private static Expression ParseDynamicMethodInvocation(Type type, Expression instance, string methodName, Expression[] args) { var argsDynamic = args.ToList(); argsDynamic.Insert(0, instance); var binderM = Microsoft.CSharp.RuntimeBinder.Binder.InvokeMember( CSharpBinderFlags.None, methodName, null, type, argsDynamic.Select(x => CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null)) ); return Expression.Dynamic(binderM, typeof(object), argsDynamic); }