public static void CheckCallFactoryInstanceN() { const int N = 4; ParameterExpression obj = Expression.Parameter(typeof(MS)); ConstantExpression[] args = Enumerable.Range(0, N).Select(i => Expression.Constant(i)).ToArray(); MethodCallExpression expr = Expression.Call(obj, typeof(MS).GetMethod("I" + N), args); if (!PlatformDetection.IsNetNative) // .Net Native blocks internal framework reflection. { Assert.Equal("InstanceMethodCallExpressionN", expr.GetType().Name); } Assert.Same(obj, expr.Object); Assert.Equal(N, expr.ArgumentCount); for (var i = 0; i < N; i++) { Assert.Same(args[i], expr.GetArgument(i)); } Collections.ObjectModel.ReadOnlyCollection <Expression> arguments = expr.Arguments; Assert.Same(arguments, expr.Arguments); Assert.Equal(N, arguments.Count); for (var i = 0; i < N; i++) { Assert.Same(args[i], arguments[i]); } MethodCallExpression updated = expr.Update(obj, arguments.ToList()); Assert.Same(expr, updated); var visited = (MethodCallExpression) new NopVisitor().Visit(expr); Assert.Same(expr, visited); var visitedObj = (MethodCallExpression) new VisitorObj().Visit(expr); Assert.NotSame(expr, visitedObj); Assert.NotSame(obj, visitedObj.Object); Assert.Same(arguments, visitedObj.Arguments); var visitedArgs = (MethodCallExpression) new VisitorArgs().Visit(expr); Assert.NotSame(expr, visitedArgs); Assert.Same(obj, visitedArgs.Object); Assert.NotSame(arguments, visitedArgs.Arguments); }
public static void CheckCallFactoryStaticN() { const int N = 6; ConstantExpression[] args = Enumerable.Range(0, N).Select(i => Expression.Constant(i)).ToArray(); MethodCallExpression expr = Expression.Call(typeof(MS).GetMethod("S" + N), args); Assert.Equal("MethodCallExpressionN", expr.GetType().Name); Assert.Equal(N, expr.ArgumentCount); for (var i = 0; i < N; i++) { Assert.Same(args[i], expr.GetArgument(i)); } Collections.ObjectModel.ReadOnlyCollection <Expression> arguments = expr.Arguments; Assert.Same(arguments, expr.Arguments); Assert.Equal(N, arguments.Count); for (var i = 0; i < N; i++) { Assert.Same(args[i], arguments[i]); } MethodCallExpression updated = expr.Update(null, arguments); Assert.Same(expr, updated); var visited = (MethodCallExpression) new NopVisitor().Visit(expr); Assert.Same(expr, visited); var visitedArgs = (MethodCallExpression) new VisitorArgs().Visit(expr); Assert.NotSame(expr, visitedArgs); Assert.Same(null, visitedArgs.Object); Assert.NotSame(arguments, visitedArgs.Arguments); }
protected internal override Expression VisitNew(NewExpression node) { Out("new "); Out(node.Type.Name); Out('('); Collections.ObjectModel.ReadOnlyCollection <MemberInfo> members = node.Members; for (int i = 0; i < node.ArgumentCount; i++) { if (i > 0) { Out(", "); } if (members != null) { string name = members[i].Name; Out(name); Out(" = "); } Visit(node.GetArgument(i)); } Out(')'); return(node); }