当前位置: 首页>>代码示例>>C#>>正文


C# Compiler.MaterializeReference方法代码示例

本文整理汇总了C#中Compiler.MaterializeReference方法的典型用法代码示例。如果您正苦于以下问题:C# Compiler.MaterializeReference方法的具体用法?C# Compiler.MaterializeReference怎么用?C# Compiler.MaterializeReference使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Compiler的用法示例。


在下文中一共展示了Compiler.MaterializeReference方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: CompileDereference

        protected virtual Expression CompileDereference(Compiler compiler, Frame frame, Expression left, Parse.BinaryExpression expression, System.Type typeHint)
        {
            left = compiler.MaterializeReference(left);

            var local = compiler.AddFrame(frame, expression);
            var memberType = left.Type.GenericTypeArguments[0];
            var parameters = new List<ParameterExpression>();

            var valueParam = compiler.CreateValueParam(expression, local, left, memberType);
            parameters.Add(valueParam);

            var indexParam = compiler.CreateIndexParam(expression, local);
            parameters.Add(indexParam);

            var right =
                compiler.MaterializeReference
                (
                    compiler.CompileExpression(local, expression.Right, typeHint)
                );

            var selection = Expression.Lambda(right, parameters);
            var select =
                typeof(Enumerable).GetMethodExt
                (
                    "Select",
                    new System.Type[] { typeof(IEnumerable<ReflectionUtility.T>), typeof(Func<ReflectionUtility.T, int, ReflectionUtility.T>) }
                );
            select = select.MakeGenericMethod(memberType, selection.ReturnType);
            return Expression.Call(select, left, selection);
        }
开发者ID:jgabb8989,项目名称:DotQL,代码行数:30,代码来源:NaryTypeHandler.cs

示例2: CompileBinaryExpression

        public override Expression CompileBinaryExpression(Compiler compiler, Frame frame, Expression left, Parse.BinaryExpression expression, System.Type typeHint)
        {
            switch (expression.Operator)
            {
                case Parse.Operator.Equal:
                case Parse.Operator.NotEqual:
                    left = compiler.MaterializeReference(left);
                    var right = compiler.MaterializeReference(compiler.CompileExpression(frame, expression.Right));

                    switch (expression.Operator)
                    {
                        case Parse.Operator.Equal: return Expression.Equal(left, right);
                        case Parse.Operator.NotEqual: return Expression.NotEqual(left, right);
                        default: throw new NotSupportedException();
                    }

                case Parse.Operator.Dereference: return CompileDereference(compiler, frame, left, expression, typeHint);

                default: throw new NotSupportedException(String.Format("Operator {0} is not supported.", expression.Operator));
            }
        }
开发者ID:jgabb8989,项目名称:DotQL,代码行数:21,代码来源:TupleTypeHandler.cs

示例3: CompileBinaryExpression

        public override Expression CompileBinaryExpression(Compiler compiler, Frame frame, Expression left, Parse.BinaryExpression expression, System.Type typeHint)
        {
            left = compiler.MaterializeReference(left);

            switch (expression.Operator)
            {
                case Parse.Operator.Addition:
                case Parse.Operator.Subtract:
                case Parse.Operator.Multiply:
                case Parse.Operator.Modulo:
                case Parse.Operator.Divide:
                case Parse.Operator.Power:

                case Parse.Operator.BitwiseAnd:
                case Parse.Operator.And:
                case Parse.Operator.BitwiseOr:
                case Parse.Operator.Or:
                case Parse.Operator.BitwiseXor:
                case Parse.Operator.Xor:
                case Parse.Operator.ShiftLeft:
                case Parse.Operator.ShiftRight:
                    {
                        var right = compiler.MaterializeReference(compiler.CompileExpression(frame, expression.Right, typeHint));
                        return CompileOperator(left, right, expression.Operator);
                    }

                case Parse.Operator.Equal:
                case Parse.Operator.NotEqual:
                case Parse.Operator.InclusiveGreater:
                case Parse.Operator.InclusiveLess:
                case Parse.Operator.Greater:
                case Parse.Operator.Less:
                    {
                        var right = compiler.MaterializeReference(compiler.CompileExpression(frame, expression.Right));	// (no type hint)
                        return CompileOperator(left, right, expression.Operator);
                    }

                default: throw new NotSupportedException(String.Format("Operator {0} is not supported.", expression.Operator));
            }
        }
开发者ID:jgabb8989,项目名称:DotQL,代码行数:40,代码来源:ScalarTypeHandler.cs

示例4: CompileDereference

        private Expression CompileDereference(Compiler compiler, Frame frame, Expression left, Parse.BinaryExpression expression, System.Type typeHint)
        {
            left = compiler.MaterializeReference(left);

            var local = compiler.AddFrame(frame, expression);
            foreach (var field in left.Type.GetFields(BindingFlags.Public | BindingFlags.Instance))
            {
                local.Add(expression, Name.FromNative(field.Name), field);
                var fieldExpression = Expression.Field(left, field);
                compiler.ExpressionsBySymbol.Add(field, fieldExpression);
            }
            return compiler.CompileExpression(local, expression.Right, typeHint);
        }
开发者ID:jgabb8989,项目名称:DotQL,代码行数:13,代码来源:TupleTypeHandler.cs

示例5: CompileUnaryExpression

        public override Expression CompileUnaryExpression(Compiler compiler, Frame frame, Expression inner, Parse.UnaryExpression expression, System.Type typeHint)
        {
            inner = compiler.MaterializeReference(inner);

            switch (expression.Operator)
            {
                case Parse.Operator.Exists:
                    return Expression.GreaterThan
                    (
                        Expression.Property(inner, typeof(ICollection<>).MakeGenericType(inner.Type).GetProperty("Count")),
                        Expression.Constant(0)
                    );
                case Parse.Operator.IsNull: return Expression.Constant(false);

                default: throw new NotSupportedException(String.Format("Operator {0} is not supported.", expression.Operator));
            }
        }
开发者ID:jgabb8989,项目名称:DotQL,代码行数:17,代码来源:NaryTypeHandler.cs

示例6: CompileUnaryExpression

        public override Expression CompileUnaryExpression(Compiler compiler, Frame frame, Expression inner, Parse.UnaryExpression expression, System.Type typeHint)
        {
            inner = compiler.MaterializeReference(inner);

            switch (expression.Operator)
            {
                case Parse.Operator.Exists: return Expression.Constant(true);
                case Parse.Operator.IsNull: return Expression.Constant(false);
                case Parse.Operator.Negate: return Expression.Negate(inner);
                case Parse.Operator.Not: return Expression.Not(inner);
                //case Parse.Operator.Successor:
                //case Parse.Operator.Predicessor:

                default: throw new NotSupportedException(String.Format("Operator {0} is not supported.", expression.Operator));
            }
        }
开发者ID:jgabb8989,项目名称:DotQL,代码行数:16,代码来源:ScalarTypeHandler.cs


注:本文中的Compiler.MaterializeReference方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。