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);
        }
예제 #2
0
            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));
            }