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


C# Expression.GetType方法代码示例

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


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

示例1: OccurrenceOf

    public int OccurrenceOf(Expression exp) {
      if (!IsLeaf())
        return LChild.OccurrenceOf(exp) + (RChild?.OccurrenceOf(exp) ?? 0);

      if (exp.GetType() == Data.GetType()) {
        Console.WriteLine(exp.GetType());
        Console.WriteLine(Data.GetType());
        if (Data is NameSegment) {
          var ns1 = (NameSegment)Data;
          var ns2 = (NameSegment)exp;
          if (ns1.Name == ns2.Name)
            return 1;
        } else if (Data is LiteralExpr) {
          var ns1 = (LiteralExpr)Data;
          var ns2 = (LiteralExpr)exp;
          if (ns1.Value == ns2.Value)
            return 1;
        } else if (Data is UnaryOpExpr) {
          var ns1 = (UnaryOpExpr)Data;
          var ns2 = (UnaryOpExpr)exp;
          var e1 = (NameSegment)ns1.E;
          var e2 = (NameSegment)ns2.E;
          if (e1.Name == e2.Name)
            return 1;
        }
      }
      return 0;
    }
开发者ID:ggrov,项目名称:tacny,代码行数:28,代码来源:ExpressionTree.cs

示例2: GetFormatter

        public static IExpressionFormatter GetFormatter( IIndentable indentable, Expression expression )
        {
            Type formatterType;
            if ( !_formatters.TryGetValue( expression.GetType(), out formatterType ) )
                return new DefaultExpressionFormatter( expression );

            var formatter = Activator.CreateInstance( formatterType, expression ) as IExpressionFormatter;
            ( formatter as IIndentable ).IndentLevel = indentable.IndentLevel;
            ( formatter as IIndentable ).Indent = indentable.Indent;

            if ( formatter == null )
                throw new ArgumentNullException( "Formatter not instantiated: " + formatterType.Name );

            return formatter;
        }
开发者ID:Bigjono,项目名称:sqlformat,代码行数:15,代码来源:ExpressionFormatterFactory.cs

示例3: ReplaceTerm

        private void ReplaceTerm(Expression old_singleton, Expression new_term, ExpressionTree formula, ref List<Expression> nexp)
        {
            Contract.Requires(nexp != null);
            Contract.Requires(old_singleton != null);
            Contract.Requires(new_term != null);
            NameSegment curNs = null;
            NameSegment oldNs = null;

            if (formula == null)
                return;

            if (formula.isLeaf())
            {
                if (formula.data.GetType() == old_singleton.GetType() && formula.was_replaced == false)
                {
                    if (formula.data is NameSegment)
                    {
                        curNs = (NameSegment)formula.data;
                        oldNs = (NameSegment)old_singleton;

                    }
                    else if (formula.data is UnaryOpExpr)
                    {
                        curNs = (NameSegment)((UnaryOpExpr)formula.data).E;
                        oldNs = (NameSegment)((UnaryOpExpr)old_singleton).E;
                    }
                    else
                        Contract.Assert(false, Util.Error.MkErr(formula.data, -1));

                    if (curNs.Name == oldNs.Name)
                    {
                        ExpressionTree nt = formula.Copy();
                        nt.data = new_term;

                        if (nt.parent.lChild == nt)
                            nt.parent.lChild = nt;
                        else
                            nt.parent.rChild = nt;

                        nexp.Add(nt.root.TreeToExpression());
                    }
                }
                return;
            }
            ReplaceTerm(old_singleton, new_term, formula.lChild, ref nexp);
            ReplaceTerm(old_singleton, new_term, formula.rChild, ref nexp);
        }
开发者ID:ggrov,项目名称:tacny,代码行数:47,代码来源:SingletonAtomic.cs

示例4: MakeYield

        public static YieldExpression MakeYield(LabelTarget target, Expression value, int yieldMarker)
        {
            ContractUtils.RequiresNotNull(target, "target");
            ContractUtils.Requires(target.Type != typeof(void), "target", "generator label must have a non-void type");
            if (value != null) {
                if (!TypeUtils.AreReferenceAssignable(target.Type, value.Type)) {
                    // C# autoquotes generator return values
                    if (target.Type.IsSubclassOf(typeof(Expression)) &&
                        TypeUtils.AreAssignable(target.Type, value.GetType())) {
                        value = Expression.Quote(value);
                    }
                    throw new ArgumentException(string.Format("Expression of type '{0}' cannot be yielded to a generator label of type '{1}'", value.Type, target.Type));
                }
            }

            return new YieldExpression(target, value, yieldMarker);
        }
开发者ID:TerabyteX,项目名称:main,代码行数:17,代码来源:YieldExpression.cs

示例5: UsualArithmeticConversions

            private static Pair<Expression, Expression> UsualArithmeticConversions(
				Expression lop, Expression rop)
            {
                Symbols.Type lt = lop.GetType(), rt = rop.GetType();

                if (lt is Symbols.DOUBLE || rt is Symbols.DOUBLE)
                {
                    if (rt != lt)
                    {
                        if (lt is Symbols.DOUBLE) { rop = new Cast(rop, lt); }
                        else { lop = new Cast(lop, rt); }
                    }
                }
                else if (lt is Symbols.CHAR && rt is Symbols.INT) { lop = new Cast(lop, rt); }
                else if (rt is Symbols.CHAR && lt is Symbols.INT) { rop = new Cast(rop, lt); }

                return new Pair<Expression, Expression>(lop, rop);
            }
开发者ID:khomyakov42,项目名称:Compiler,代码行数:18,代码来源:Symantic.cs

示例6: TestIdenticality

        /// <summary>
        /// Tests a pair of expressions for identicality using the equality definitions defined in this class.
        /// </summary>
        /// <param name="E1">The first expression to test</param>
        /// <param name="E2">The second expression to test</param>
        public static bool TestIdenticality(Expression E1, Expression E2)
        {
            //Test for "null" arguments
            if ((E1 as object) == null && (E2 as object) == null) return true;
            if ((E1 as object) == null || (E2 as object) == null) return false;

            //To be identical, they must have the same type
            if (E1.GetType() != E2.GetType()) return false;

            //If E1 maps to E2
            if (E1.MapsTo(E2)) return true;

            //Fast tests amoungst operands
            if ((E1 is Irreducible) && (E2 is Irreducible)) return TestIdenticality_FastTests_Operands(E1, E2);

            //Test for identicality amoungst binary operations
            if (((E1 is Operation) && (E1 as Operation).Arity == 2) && ((E2 is Operation) && (E2 as Operation).Arity == 2)) return TestEquality(E1, E2, BinaryOperations);

            //If we couldn't determine that they are equal:
            return false;
        }
开发者ID:HarrisonTotty,项目名称:Simplex.Math,代码行数:26,代码来源:EqualityDefinitions.cs

示例7: Contains

        public static bool Contains(Expression expr, Expression sub)
        {
            if (expr.GetType().Equals(sub.GetType()))
                return expr.Equals(sub);

            if (expr is BinaryExpression)
            {
                BinaryExpression bexpr = (BinaryExpression)expr;

                return Contains(bexpr.Left, sub) && Contains(bexpr.Right, sub);
            }
            else if (expr is LinearExpression)
            {
                LinearExpression lexpr = (LinearExpression)expr;

                bool contains = true;

                foreach (Expression item in lexpr.List)
                    contains = contains && Contains(item, sub);

                return contains;
            }
            else if (expr is FunctionExpression)
            {
                FunctionExpression fexpr = (FunctionExpression)expr;

                bool contains = true;

                foreach (Expression arg in fexpr.Arguments)
                    contains = contains && Contains(arg, sub);

                return contains;
            }

            return false;
        }
开发者ID:lekararikoldprojects,项目名称:AlgebraSystem,代码行数:36,代码来源:Expression.cs

示例8: Quote

        ///<summary>Creates a <see cref="T:System.Linq.Expressions.UnaryExpression" /> that represents an expression that has a constant value of type <see cref="T:System.Linq.Expressions.Expression" />.</summary>
        ///<returns>A <see cref="T:System.Linq.Expressions.UnaryExpression" /> that has the <see cref="P:System.Linq.Expressions.Expression.NodeType" /> property equal to <see cref="F:System.Linq.Expressions.ExpressionType.Quote" /> and the <see cref="P:System.Linq.Expressions.UnaryExpression.Operand" /> property set to the specified value.</returns>
        ///<param name="expression">An <see cref="T:System.Linq.Expressions.Expression" /> to set the <see cref="P:System.Linq.Expressions.UnaryExpression.Operand" /> property equal to.</param>
        ///<exception cref="T:System.ArgumentNullException">
        ///<paramref name="expression" /> is null.</exception>
        public static UnaryExpression Quote(Expression expression) {
            RequiresCanRead(expression, "expression");
            bool validQuote = expression is LambdaExpression;
#if SILVERLIGHT
            validQuote |= SilverlightQuirks;
#endif
            if (!validQuote) throw Error.QuotedExpressionMustBeLambda();
            return new UnaryExpression(ExpressionType.Quote, expression, expression.GetType(), null);
        }
开发者ID:krytht,项目名称:DotNetReferenceSource,代码行数:14,代码来源:UnaryExpression.cs

示例9: Of

 public static int Of(Expression op)
 {
     return Of(op.GetType());
 }
开发者ID:rslijp,项目名称:sharptiles,代码行数:4,代码来源:OperatorPrecedence.cs

示例10: GenerateExpression

        private void GenerateExpression(Expression expr, Type expectedType)
        {
            Type deliveredType;

            if (expr is StringLiteral)
            {
                deliveredType = typeof(string);
                ilgenerator.Emit(OpCodes.Ldstr, ((StringLiteral)expr).Value);
            }
            else if (expr is IntegerLiteral)
            {
                deliveredType = typeof(int);
                ilgenerator.Emit(OpCodes.Ldc_I4, ((IntegerLiteral)expr).Value);
            }
            else if (expr is Variable)
            {
                var ident = ((Variable)expr).Ident;
                deliveredType = TypeOfExpr(expr);

                if (!symbolsTable.ContainsKey(ident))
                {
                    throw new CodeGeneratorException("Undeclared variable '" + ident + "'");
                }

                ilgenerator.Emit(OpCodes.Ldloc, symbolsTable[ident]);
            }
            else if (expr is BinaryExpression)
            {
                deliveredType = typeof(int);

                GenerateExpression(((BinaryExpression)expr).Left, typeof(int));
                GenerateExpression(((BinaryExpression)expr).Right, typeof(int));

                var binExpr = (BinaryExpression)expr;

                switch (binExpr.Op)
                {
                    case BinaryOperator.Add:
                        ilgenerator.Emit(OpCodes.Add);
                        break;
                    case BinaryOperator.Sub:
                        ilgenerator.Emit(OpCodes.Sub);
                        break;
                    case BinaryOperator.Mul:
                        ilgenerator.Emit(OpCodes.Mul);
                        break;
                    case BinaryOperator.Div:
                        ilgenerator.Emit(OpCodes.Div);
                        break;
                }
            }
            else
            {
                throw new CodeGeneratorException("Unable to generate " + expr.GetType().Name);
            }

            if (deliveredType != expectedType)
            {
                if (deliveredType == typeof(int) && expectedType == typeof(string))
                {
                    ilgenerator.Emit(OpCodes.Box, typeof(int));
                    ilgenerator.Emit(OpCodes.Callvirt, typeof(object).GetMethod("ToString"));
                }
                else
                {
                    throw new CodeGeneratorException("Can't convert type " + deliveredType.Name + " to " + expectedType.Name);
                }
            }
        }
开发者ID:DVitinnik,项目名称:UniversityApps,代码行数:69,代码来源:CodeGenerator.cs

示例11: TypeOfExpr

        private Type TypeOfExpr(Expression expr)
        {
            if (expr is StringLiteral)
            {
                return typeof(string);
            }

            if (expr is IntegerLiteral)
            {
                return typeof(int);
            }

            if (expr is Variable)
            {
                var var = (Variable)expr;

                if (symbolsTable.ContainsKey(var.Ident))
                {
                    return symbolsTable[var.Ident].LocalType;
                }

                throw new CodeGeneratorException("Undeclared variable '" + var.Ident + "'");
            }

            if (expr is BinaryExpression)
            {
                return typeof(int);
            }

            throw new CodeGeneratorException("Unable to find the type of " + expr.GetType().Name);
        }
开发者ID:DVitinnik,项目名称:UniversityApps,代码行数:31,代码来源:CodeGenerator.cs

示例12: Solve

        static Expression Solve(Expression left, Expression right, Variable v)
        {
            left = left.Simplify();
            right = right.Simplify();
            Console.WriteLine("\t{0} = {1} // {2} == {3}", left, right, left.GetType().Name, right.GetType().Name);

            if (!left.IsDependOf(v)) throw new Exception("Can't solve equation. No dependencies of variable '" + v.Name + "'.");
            if (left is Symbolic.Operators.Scalar.Add)
            {
                Expression ll = Left(left);
                Expression lr = Right(left);
                if (lr.IsDependOf(v)) return Solve(lr, right - ll, v);
                else return Solve(ll, right - lr, v);
            }
            else if (left is Symbolic.Operators.Scalar.Sub)
            {
                Expression ll = Left(left);
                Expression lr = Right(left);
                if (lr.IsDependOf(v)) return Solve(-lr, right - ll, v);
                else return Solve(ll, right + lr, v);
            }
            else if (left is Symbolic.Operators.Scalar.Div)
            {
                Expression ll = Left(left);
                Expression lr = Right(left);
                if (lr.IsDependOf(v)) return Solve(lr, ll / right, v);
                else return Solve(ll, right * lr, v);
            }
            else if (left is Symbolic.Operators.Scalar.Mul)
            {
                Expression ll = Left(left);
                Expression lr = Right(left);
                if (lr.IsDependOf(v)) return Solve(lr, right / ll, v);
                else return Solve(ll, right / lr, v);
            }
            else if (left is Symbolic.Operators.Scalar.Pow)
            {
                Expression ll = Left(left);
                Expression lr = Right(left);
                if (lr.IsDependOf(v)) return Solve(lr, SMath.Log(right, ll), v);
                else return Solve(ll, right ^ (1 / lr), v);
            }
            else if (left is Symbolic.Functions.Sqrt)
            {
                Expression ll = (left as Symbolic.Functions.Sqrt).Args[0];
                return Solve(ll, right ^ 2, v);
            }
            else if (left is Symbolic.Functions.Sin)
            {
                Expression ll = (left as Symbolic.Functions.Sin).Args[0];
                return Solve(ll, SMath.ArcSin(right), v);
            }
            else if (left is Symbolic.Functions.Cos)
            {
                Expression ll = (left as Symbolic.Functions.Cos).Args[0];
                return Solve(ll, SMath.ArcCos(right), v);
            }
            else if (left is Symbolic.Functions.Tan)
            {
                Expression ll = (left as Symbolic.Functions.Tan).Args[0];
                return Solve(ll, SMath.ArcTan(right), v);
            }
            else if (left is Symbolic.Functions.ArcSin)
            {
                Expression ll = (left as Symbolic.Functions.ArcSin).Args[0];
                return Solve(ll, SMath.Sin(right), v);
            }
            else if (left is Symbolic.Functions.ArcCos)
            {
                Expression ll = (left as Symbolic.Functions.ArcCos).Args[0];
                return Solve(ll, SMath.Cos(right), v);
            }
            else if (left is Symbolic.Functions.ArcTan)
            {
                Expression ll = (left as Symbolic.Functions.ArcTan).Args[0];
                return Solve(ll, SMath.Tan(right), v);
            }
            else if (left is Symbolic.Functions.Exp)
            {
                Expression ll = (left as Symbolic.Functions.Exp).Args[0];
                return Solve(ll, SMath.Ln(right), v);
            }
            else if (left is Symbolic.Functions.Ln)
            {
                Expression ll = (left as Symbolic.Functions.Ln).Args[0];
                return Solve(ll, SMath.Exp(right), v);
            }
            else if (left is Variable && left.IsDependOf(v)) return right;
            else throw new Exception("Can't solve equation. Unknown equation type.");
        }
开发者ID:AlexSabaka,项目名称:symbolicmath,代码行数:90,代码来源:Program.cs

示例13: PostfixConvertResult

            public static BinaryConvertResult PostfixConvertResult(Expression lop, Expression rop,
				PostfixOperator op)
            {
                BinaryConvertResult res = new BinaryConvertResult();

                switch (op)
                {
                    case PostfixOperator.REF:
                    case PostfixOperator.DOT:
                        Symbols.Type t = lop.GetType() is Symbols.POINTER && op == PostfixOperator.REF?
                            ((Symbols.POINTER)lop.GetType()).GetRefType() : lop.GetType();

                        if (!(t is Symbols.RECORD))
                        {
                            throw new Symbols.Exception(lop, NOT_STRUCT);
                        }

                        if (!((Symbols.RECORD)t).GetTable().ContainsVariable(((Identifier)rop).GetName()))
                        {
                            throw new Symbols.Exception(rop,
                                string.Format(NOT_MEMBER, ((Identifier)rop).GetName(), t.GetName())
                            );
                        }
                        res.lvalue = true;
                        res.type = (((Symbols.RECORD)t).GetTable().GetVariable(((Identifier)rop).GetName())).GetType();
                        break;
                    case PostfixOperator.INDEX:
                        if (!(lop.GetType() is Symbols.POINTER))
                        {
                            throw new Symbols.Exception(lop, NOT_POINTER);
                        }
                        if (!rop.GetType().IsInteger())
                        {
                            throw new Symbols.Exception(rop, NOT_INTEGER);
                        }
                        res.lvalue = true;
                        res.type = ((Symbols.RefType)lop.GetType()).GetRefType();
                        break;
                }

                res.left = lop;
                res.right = rop;
                return res;
            }
开发者ID:khomyakov42,项目名称:Compiler,代码行数:44,代码来源:Symantic.cs

示例14: InvalidExpressionException

 public InvalidExpressionException(string message, Expression expr, params Type[] options)
     : base(message +
         (expr == null ? " received null expression " : " received expression of type " + expr.GetType().Name) +
         (options == null ? "" : " Valid options include: " + string.Join(",", options.Select(o=>o.Name))))
 {
 }
开发者ID:hannasm,项目名称:ExpressiveExpressionTreesDotNet,代码行数:6,代码来源:InvalidExpressionException.cs

示例15: RecordExpression

        /// <summary>
        /// Records information about the given expression, under the given node.
        /// </summary>
        /// <param name="expression">
        /// The expression to record.
        /// </param>
        /// <param name="parentNode">
        /// The Xml node to record this expression beneath.
        /// </param>
        /// <returns>
        /// Returns the new Xml node describing this expression.
        /// </returns>
        private static XmlNode RecordExpression(Expression expression, XmlNode parentNode)
        {
            Param.AssertNotNull(expression, "expression");
            Param.AssertNotNull(parentNode, "parentNode");

            // Create a new node for this expression and add it to the parent.
            XmlNode expressionNode = parentNode.OwnerDocument.CreateElement("Expression");
            parentNode.AppendChild(expressionNode);

            // Add the name and contents of the expression.
            if (expression.ExpressionType == ExpressionType.Literal)
            {
                XmlAttribute text = parentNode.OwnerDocument.CreateAttribute("Text");
                text.Value = expression.ToString();
                expressionNode.Attributes.Append(text);
            }

            XmlAttribute type = parentNode.OwnerDocument.CreateAttribute("Type");
            type.Value = expression.GetType().Name;
            expressionNode.Attributes.Append(type);

            return expressionNode;
        }
开发者ID:transformersprimeabcxyz,项目名称:_TO-FIRST-stylecop,代码行数:35,代码来源:CsParserDump.cs


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