コード例 #1
0
        private static void ReInstateField()
        {
            NewExpression newAnimal = Expression.New(typeof(Animal));

            MemberInfo species = typeof(Animal).GetMember("Species")[0];
            MemberInfo age     = typeof(Animal).GetMember("Age")[0];

            MemberBinding speciesBinding = Expression.Bind(species, Expression.Constant("aabc"));
            MemberBinding ageBinding     = Expression.Bind(age, Expression.Constant(123));

            MemberInitExpression initExpression = Expression.MemberInit(newAnimal, speciesBinding, ageBinding);

            ParameterExpression animalObj = Expression.Variable(typeof(Animal));
            BinaryExpression    setAnimal = Expression.Assign(animalObj, initExpression);


            MemberExpression nameExp    = Expression.Field(animalObj, "Name");
            BinaryExpression binaryFile = Expression.Assign(nameExp, Expression.Constant("abc"));

            BlockExpression blockExpression1 = Expression.Block(new[] { animalObj }, setAnimal, binaryFile, animalObj);
            var             strExp           = initExpression.ToString();

            ParameterExpression xP = Expression.Parameter(typeof(Animal), "x");
            var exp1  = Expression.Lambda <Func <Animal> >(blockExpression1);
            var reval = exp1.Compile()();
        }
コード例 #2
0
        public static void ToStringTest()
        {
            MemberInitExpression e1 = Expression.MemberInit(Expression.New(typeof(Y)), Expression.Bind(typeof(Y).GetProperty(nameof(Y.Z)), Expression.Parameter(typeof(int), "z")));

            Assert.Equal("new Y() {Z = z}", e1.ToString());

            MemberInitExpression e2 = Expression.MemberInit(Expression.New(typeof(Y)), Expression.Bind(typeof(Y).GetProperty(nameof(Y.Z)), Expression.Parameter(typeof(int), "z")), Expression.Bind(typeof(Y).GetProperty(nameof(Y.A)), Expression.Parameter(typeof(int), "a")));

            Assert.Equal("new Y() {Z = z, A = a}", e2.ToString());

            MemberInitExpression e3 = Expression.MemberInit(Expression.New(typeof(X)), Expression.MemberBind(typeof(X).GetProperty(nameof(X.Y)), Expression.Bind(typeof(Y).GetProperty(nameof(Y.Z)), Expression.Parameter(typeof(int), "z"))));

            Assert.Equal("new X() {Y = {Z = z}}", e3.ToString());

            MemberInitExpression e4 = Expression.MemberInit(Expression.New(typeof(X)), Expression.MemberBind(typeof(X).GetProperty(nameof(X.Y)), Expression.Bind(typeof(Y).GetProperty(nameof(Y.Z)), Expression.Parameter(typeof(int), "z")), Expression.Bind(typeof(Y).GetProperty(nameof(Y.A)), Expression.Parameter(typeof(int), "a"))));

            Assert.Equal("new X() {Y = {Z = z, A = a}}", e4.ToString());

            Reflection.MethodInfo add = typeof(List <int>).GetMethod(nameof(List <int> .Add));

            MemberInitExpression e5 = Expression.MemberInit(Expression.New(typeof(X)), Expression.ListBind(typeof(X).GetProperty(nameof(X.XS)), Expression.ElementInit(add, Expression.Parameter(typeof(int), "a"))));

            Assert.Equal("new X() {XS = {Void Add(Int32)(a)}}", e5.ToString());

            MemberInitExpression e6 = Expression.MemberInit(Expression.New(typeof(X)), Expression.ListBind(typeof(X).GetProperty(nameof(X.XS)), Expression.ElementInit(add, Expression.Parameter(typeof(int), "a")), Expression.ElementInit(add, Expression.Parameter(typeof(int), "b"))));

            Assert.Equal("new X() {XS = {Void Add(Int32)(a), Void Add(Int32)(b)}}", e6.ToString());
        }
コード例 #3
0
 //
 // Summary:
 //     Visits the children of the System.Linq.Expressions.MemberInitExpression.
 //
 // Parameters:
 //   node:
 //     The expression to visit.
 //
 // Returns:
 //     The modified expression, if it or any subexpression was modified; otherwise,
 //     returns the original expression.
 protected override Expression VisitMemberInit(MemberInitExpression node)
 {
     Console.WriteLine("VisitMemberInit:");
     Console.WriteLine('\t' + node.GetType().ToString());
     Console.WriteLine('\t' + node.ToString());
     return(base.VisitMemberInit(node));
 }
コード例 #4
0
        private static void ReinstatementExpression()
        {
            NewExpression newAnimal = Expression.New(typeof(Animal));

            MemberExpression nameExp = Expression.Field(newAnimal, "Name");

            MemberInfo species = typeof(Animal).GetMember("Species")[0];
            MemberInfo age     = typeof(Animal).GetMember("Age")[0];


            MemberBinding speciesBinding = Expression.Bind(species, Expression.Constant("aaa"));
            MemberBinding ageBinding     = Expression.Bind(age, Expression.Constant(10));



            MemberInitExpression initExpression = Expression.MemberInit(newAnimal, speciesBinding, ageBinding);

            Console.WriteLine(initExpression.ToString());

            var exp = Expression.Lambda <Func <Animal> >(initExpression);
            var a   = exp.Compile()();

            ParameterExpression xParam = Expression.Parameter(typeof(Animal), "x");
            var exp2 = Expression.Lambda <Func <Animal, Animal> >(initExpression, xParam);
            var nt2  = exp2.NodeType;
            var nt22 = exp2.Body.NodeType;

            Console.WriteLine(exp2.ToString());


            BlockExpression blockExp = Expression.Block(initExpression);

            var exp3 = Expression.Lambda <Func <Animal, Animal> >(blockExp, xParam);

            Console.WriteLine(exp3);
            var nt3  = exp3.NodeType;
            var nt33 = exp3.Body.NodeType;
            var n3   = exp3.Compile()(null);

            var nodeType = exp.Body.NodeType;

            Console.WriteLine(nodeType);


            var aimal = new Animal();
            var n1    = aimal.GetName(x => x.Age);

            object obj = new object();

            var path = GetPropertyName <Animal, int>(x => aimal.Age);

            var path2 = GetPropertyName <Animal, string>(x => aimal.Info.Desc);

            aimal.GetName(x => x.Species);
            aimal.GetName(x => x.Age);
        }
コード例 #5
0
        protected virtual Expression VisitMemberInit(MemberInitExpression node)
        {
            Console.WriteLine("VisitMemberInit:" + node.ToString());
            //foreach (var exp in node.Bindings)
            //{
            //    var ma = exp as MemberAssignment;
            //    Expression.Bind(exp.Member, ma.Expression);

            //    this.Visit(ma.Expression);
            //    // this.Visit(exp as MemberInitExpression);
            //    var item = string.Format("[{0}].[{1}] = {2}", ma.Member.ReflectedType.Name, ma.Member.Name, GetValue(ma.Expression).ToString());
            //    Console.WriteLine("MemberAssignment:" + item);
            //}

            return(node);
        }
コード例 #6
0
        private void VisitMemberInit(MemberInitExpression node)
        {
            foreach (var memberBinding in node.Bindings)
            {
                var memberAssignment = memberBinding as MemberAssignment;
                if (memberAssignment != null)
                {
                    _mappings.Add(new ProjectionMemberMapping
                    {
                        Expression = memberAssignment.Expression,
                        Member     = memberAssignment.Member
                    });
                }
                else
                {
                    var message = string.Format("Only member assignments are supported in a new expression in $project and $group, but found {0}.",
                                                node.ToString());
                    throw new NotSupportedException(message);
                }
            }

            VisitNew(node.NewExpression);
        }
コード例 #7
0
 /// <summary>访问子内容为: <see cref="T:System.Linq.Expressions.MemberInitExpression"></see>.</summary>
 /// <param name="node">被访问的表达式</param>
 /// <returns>The modified expression, if it or any subexpression was modified; otherwise, returns the original expression.</returns>
 protected override Expression VisitMemberInit(MemberInitExpression node)
 {
     Log(node.ToString());
     throw new NotImplementedException();
 }
コード例 #8
0
ファイル: ExpressionVisitor`.cs プロジェクト: zyj0021/Chloe
 protected virtual T VisitMemberInit(MemberInitExpression exp)
 {
     throw new NotImplementedException(exp.ToString());
 }
コード例 #9
0
 internal override Expression VisitMemberInit(MemberInitExpression init)
 {
     if (!ClientTypeUtil.TypeOrElementTypeIsEntity(init.Type))
     {
         throw new NotSupportedException(System.Data.Services.Client.Strings.ALinq_ExpressionNotSupportedInProjectionToEntity(this.type, init.ToString()));
     }
     ProjectionAnalyzer.Analyze(init, this.box, this.context);
     return(init);
 }
コード例 #10
0
            internal override Expression VisitMemberInit(MemberInitExpression init)
            {
                if (!ClientTypeUtil.TypeOrElementTypeIsEntity(init.Type))
                {
                    // MemberInit to a complex type is not supported on entity types.
                    throw new NotSupportedException(Strings.ALinq_ExpressionNotSupportedInProjectionToEntity(this.type, init.ToString()));
                }

                ProjectionAnalyzer.Analyze(init, this.builder, this.context);
                return(init);
            }