private static bool FindExpressionForMember(ExtendedNewExpression extendedNewExpression, MemberInfo memberInfo, out Expression expression) { for (var i = 0; i < extendedNewExpression.ReadableMembers.Count; i++) { var member = extendedNewExpression.ReadableMembers[i]; if (member != null && member.DeclaringType == memberInfo.DeclaringType && member.Name == memberInfo.Name) { expression = extendedNewExpression.Arguments[i]; return(true); } } expression = null; return(false); }
protected virtual Expression VisitExtendedNew(ExtendedNewExpression node) { var arguments = node.Arguments.ToArray(); var currentMember = path.Pop(); for (var i = 0; i < node.Arguments.Count; i++) { var argument = arguments[i]; var member = node.ReadableMembers[i]; if (member == currentMember.GetReadableMemberInfo()) { arguments[i] = Visit(argument); break; } } path.Push(currentMember); return(node.Update(arguments)); }