System.Linq.Expressions.UnaryExpression.ReduceMember C# (CSharp) Метод

ReduceMember() приватный Метод

private ReduceMember ( ) : Expression
Результат Expression
        private Expression ReduceMember()
        {
            var member = (MemberExpression)Operand;
            if (member.Expression == null)
            {
                //static member, reduce the same as variable
                return ReduceVariable();
            }
            else
            {
                ParameterExpression temp1 = Parameter(member.Expression.Type, name: null);
                BinaryExpression initTemp1 = Assign(temp1, member.Expression);
                member = MakeMemberAccess(temp1, member.Member);

                if (IsPrefix)
                {
                    // (op) value.member
                    // ... is reduced into ...
                    // temp1 = value
                    // temp1.member = op(temp1.member)
                    return Block(
                        new TrueReadOnlyCollection<ParameterExpression>(temp1),
                        new TrueReadOnlyCollection<Expression>(
                            initTemp1,
                            Assign(member, FunctionalOp(member))
                        )
                    );
                }

                // value.member (op)
                // ... is reduced into ...
                // temp1 = value
                // temp2 = temp1.member
                // temp1.member = op(temp2)
                // temp2
                ParameterExpression temp2 = Parameter(member.Type, name: null);
                return Block(
                    new TrueReadOnlyCollection<ParameterExpression>(temp1, temp2),
                    new TrueReadOnlyCollection<Expression>(
                        initTemp1,
                        Assign(temp2, member),
                        Assign(member, FunctionalOp(temp2)),
                        temp2
                    )
                );
            }
        }