public void UpdateNullThrows()
        {
            MemberListBinding binding = Expression.ListBind(
                typeof(ListWrapper <int>).GetProperty(nameof(ListWrapper <int> .ListProperty)),
                Enumerable.Range(0, 3)
                .Select(i => Expression.ElementInit(typeof(List <int>).GetMethod("Add"), Expression.Constant(i))));

            Assert.Throws <ArgumentNullException>("initializers", () => binding.Update(null));
        }
        public void UpdateSameReturnsSame()
        {
            ElementInit[] initializers = Enumerable.Range(0, 3)
                                         .Select(i => Expression.ElementInit(typeof(List <int>).GetMethod("Add"), Expression.Constant(i)))
                                         .ToArray();
            MemberListBinding binding = Expression.ListBind(
                typeof(ListWrapper <int>).GetProperty(nameof(ListWrapper <int> .ListProperty)), initializers);

            Assert.Same(binding, binding.Update(initializers));
        }
Exemple #3
0
        protected override MemberListBinding VisitMemberListBinding(MemberListBinding node)
        {
            var changed      = false;
            var initializers = new ElementInit[node.Initializers.Count];

            for (int i = 0; i < node.Initializers.Count; i++)
            {
                initializers[i] = VisitElementInit(node.Initializers[i]);
                changed        |= initializers[i] != node.Initializers[i];
            }
            if (changed)
            {
                return(node.Update(initializers));
            }
            return(node);
        }
        public void UpdateDoesntRepeatEnumeration()
        {
            MemberListBinding binding = Expression.ListBind(
                typeof(ListWrapper <int>).GetProperty(nameof(ListWrapper <int> .ListProperty)),
                Enumerable.Range(0, 3)
                .Select(i => Expression.ElementInit(typeof(List <int>).GetMethod("Add"), Expression.Constant(i))));

            Assert.NotSame(
                binding,
                binding.Update(
                    new RunOnceEnumerable <ElementInit>(
                        new[]
            {
                Expression.ElementInit(
                    typeof(List <int>).GetMethod(nameof(List <int> .Add)), Expression.Constant(1))
            })));
        }
            protected override MemberListBinding VisitMemberListBinding(MemberListBinding node)
            {
                var a = Visit(node.Initializers, VisitElementInit);

                var inits = (IList <ElementInit>)a;

                var n = node.Initializers.Count;


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

                    inits = Reduce(inits, ess);
                }

                return(node.Update(inits));
            }
 /// <summary>
 /// Visits the children of the <see cref="MemberListBinding" />.
 /// </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 MemberListBinding VisitMemberListBinding(MemberListBinding node)
 {
     return(node.Update(Visit(node.Initializers, VisitElementInit)));
 }
Exemple #7
0
 protected override MemberListBinding VisitMemberListBinding(MemberListBinding node)
 {
     return(node.Update(node.Initializers.Select(o => o.Update(o.Arguments.Select(VisitInternal)))));
 }
        protected override MemberListBinding VisitMemberListBinding(MemberListBinding node)
        {
            var initializers = VisitElementInitializerList(node.Initializers);

            return(node.Update(node.Member, initializers));
        }
        /// <summary>
        /// 访问 <see cref="MemberListBinding"/>。
        /// </summary>
        /// <param name="binding"></param>
        /// <returns></returns>
        protected virtual MemberListBinding VisitMemberListBinding(MemberListBinding binding)
        {
            var initializers = VisitElementInitializerList(binding.Initializers);

            return(binding.Update(binding.Member, initializers));
        }
Exemple #10
0
 protected virtual MemberListBinding VisitMemberListBinding(MemberListBinding binding)
 {
     return(binding.Update(binding.Initializers.Select(i => VisitElementInit(i))));
 }
 protected virtual MemberListBinding VisitMemberListBinding(MemberListBinding node, Type expectedType)
 => node.Update(Visit(node.Initializers, init => null, VisitElementInit));