protected override Expression VisitNew(NewExpression expression) { if (_target != null) { return(base.VisitNew(expression)); } _target = new TargetObject(expression.Type); var parameters = expression.Constructor.GetParameters(); for (var i = 0; i < parameters.Length; i++) { _currentField = _target.StartBinding(parameters[i].Name); Visit(expression.Arguments[i]); } return(expression); }
protected override Expression VisitNew(NewExpression expression) { if (_target == null) { _target = new TargetObject(expression.Type); if (expression.Type.GetTypeInfo().HasAttribute <CompilerGeneratedAttribute>()) { // it's anonymous, and the rules are different var parameters = expression.Constructor.GetParameters(); for (var i = 0; i < parameters.Length; i++) { var prop = expression.Type.GetProperty(parameters[i].Name); _currentField = _target.StartBinding(prop); Visit(expression.Arguments[i]); } return(null); } } return(base.VisitNew(expression)); }
protected override MemberBinding VisitMemberBinding(MemberBinding node) { _currentField = _target.StartBinding(node.Member); return(base.VisitMemberBinding(node)); }