コード例 #1
0
        public void UpdateDifferentReturnsDifferent()
        {
            MemberAssignment    bind       = Expression.Bind(typeof(Inner).GetProperty(nameof(Inner.Value)), Expression.Constant(3));
            MemberMemberBinding memberBind = Expression.MemberBind(typeof(Outer).GetProperty(nameof(Outer.InnerProperty)), bind);

            Assert.NotSame(memberBind, memberBind.Update(new[] { Expression.Bind(typeof(Inner).GetProperty(nameof(Inner.Value)), Expression.Constant(3)) }));
            Assert.NotSame(memberBind, memberBind.Update(Enumerable.Empty <MemberBinding>()));
        }
コード例 #2
0
        public void UpdateDoesntRepeatEnumeration()
        {
            MemberAssignment    bind       = Expression.Bind(typeof(Inner).GetProperty(nameof(Inner.Value)), Expression.Constant(3));
            MemberMemberBinding memberBind = Expression.MemberBind(typeof(Outer).GetProperty(nameof(Outer.InnerProperty)), bind);

            Assert.NotSame(memberBind, memberBind.Update(new RunOnceEnumerable <MemberBinding>(new[] { Expression.Bind(typeof(Inner).GetProperty(nameof(Inner.Value)), Expression.Constant(3)) })));
        }
コード例 #3
0
        public void UpdateNullThrows()
        {
            MemberAssignment    bind       = Expression.Bind(typeof(Inner).GetProperty(nameof(Inner.Value)), Expression.Constant(3));
            MemberMemberBinding memberBind = Expression.MemberBind(typeof(Outer).GetProperty(nameof(Outer.InnerProperty)), bind);

            AssertExtensions.Throws <ArgumentNullException>("bindings", () => memberBind.Update(null));
        }
コード例 #4
0
        public void UpdateSameReturnsSame()
        {
            MemberAssignment    bind       = Expression.Bind(typeof(Inner).GetProperty(nameof(Inner.Value)), Expression.Constant(3));
            MemberMemberBinding memberBind = Expression.MemberBind(typeof(Outer).GetProperty(nameof(Outer.InnerProperty)), bind);

            Assert.Same(memberBind, memberBind.Update(Enumerable.Repeat(bind, 1)));
        }
コード例 #5
0
        protected override MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding node)
        {
            var changed  = false;
            var bindings = new MemberBinding[node.Bindings.Count];

            for (int i = 0; i < node.Bindings.Count; i++)
            {
                bindings[i] = VisitMemberBinding(node.Bindings[i]);
                changed    |= bindings[i] != node.Bindings[i];
            }
            if (changed)
            {
                return(node.Update(bindings));
            }
            return(node);
        }
コード例 #6
0
            protected override MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding node)
            {
                var b = Visit(node.Bindings, VisitMemberBinding);

                var bindings = (IList <MemberBinding>)b;

                var n = node.Bindings.Count;


                if (Pop(n, out var ess) && CanEvaluate(node.Member))
                {
                    _tilingState.Push(true);
                }
                else
                {
                    _tilingState.Push(false);

                    bindings = Reduce(bindings, ess);
                }

                return(node.Update(bindings));
            }
コード例 #7
0
 /// <summary>
 /// Visits the children of the <see cref="MemberMemberBinding" />.
 /// </summary>
 /// <param name="node">The expression to visit.</param>
 /// <returns>The modified expression, if it or any subexpression was modified;
 /// otherwise, returns the original expression.</returns>
 protected virtual MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding node)
 {
     return(node.Update(Visit(node.Bindings, VisitMemberBinding)));
 }
コード例 #8
0
 protected override MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding node)
 {
     return(node.Update(node.Bindings.Select(VisitMemberBinding)));
 }
コード例 #9
0
        protected override MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding node)
        {
            var bindings = VisitBindingList(node.Bindings);

            return(node.Update(node.Member, bindings));
        }
コード例 #10
0
        /// <summary>
        /// 访问 <see cref="MemberMemberBinding"/>。
        /// </summary>
        /// <param name="binding"></param>
        /// <returns></returns>
        protected virtual MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding binding)
        {
            var bindings = VisitBindingList(binding.Bindings);

            return(binding.Update(binding.Member, bindings));
        }
コード例 #11
0
 protected virtual MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding binding)
 {
     return(binding.Update(binding.Bindings.Select(b => VisitMemberBinding(b))));
 }
コード例 #12
0
 protected virtual MemberMemberBinding VisitMemberMemberBinding(MemberMemberBinding node, Type expectedType)
 => node.Update(Visit(node.Bindings, binding => GetMemberType(binding.Member), VisitMemberBinding));