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


C# Compilation.FindExpressionTree方法代码示例

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


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

示例1: GetSemanticMember

    public static CSharpMember GetSemanticMember(this ParseTreeNode parseTreeNode, Compilation comp, SourceFile sourceFile) {
      Contract.Requires(parseTreeNode != null);
      Contract.Requires(comp != null);
      Contract.Requires(sourceFile != null);
      Contract.Ensures(Contract.Result<CSharpMember>() == null ||
                       Contract.Result<CSharpMember>().IsMethod || 
                       Contract.Result<CSharpMember>().IsConstructor || 
                       Contract.Result<CSharpMember>().IsProperty || 
                       Contract.Result<CSharpMember>().IsIndexer);

      // The CSharp model can throw internal exceptions at unexpected moments, so we filter them here:
      try
      {
        CSharpMember semanticMember;
        if (parseTreeNode.IsAnyMember())
        {
          semanticMember = comp.GetMemberFromMemberDeclaration(parseTreeNode);
          if (semanticMember == null) return null;
          goto Success;
        }
        //Can we get our expression tree?
        var expressionTree = comp.FindExpressionTree(sourceFile, parseTreeNode);
        if (expressionTree == null)
          return null;

        //Can we get our expression?
        var expression = expressionTree.FindLeafExpression(parseTreeNode);
        if (expression == null)
          return null;

        //Can we get our semanticMember?
        semanticMember = expression.FindExpressionExplicitMember();


        if (semanticMember == null)
        {
          MEMGRPExpression memgrpExpr = expression as MEMGRPExpression;
          if (memgrpExpr != null)
          {
            var foo = memgrpExpr.OwningCall;
            if (foo != null)
            {
              semanticMember = foo.mwi;
            }
            if (semanticMember == null && memgrpExpr.mps != null && memgrpExpr.mps.Text == "$Item$")
            {
              if (memgrpExpr.Object != null && memgrpExpr.Object.Type != null)
              {
                var type = memgrpExpr.Object.Type;
                if (type.Members == null) goto TryNext;

                // find indexer member
                for (int i = 0; i < type.Members.Count; i++)
                {
                  var mem = type.Members[i];
                  if (mem == null) continue;
                  if (mem.IsIndexer)
                  {
                    semanticMember = mem;
                    break;
                  }
                }
              }
            }

          }
        }
      TryNext: ;
      Success:
        //Is our semanticMember a method?
        if (semanticMember == null || !(semanticMember.IsMethod || semanticMember.IsConstructor || semanticMember.IsProperty || semanticMember.IsIndexer))
          return null;

        //Unistantiate
        semanticMember = semanticMember.Uninstantiate();

        return semanticMember;
      }
      catch (ArgumentException)
      {
        return null;
      }
    }
开发者ID:asvishnyakov,项目名称:CodeContracts,代码行数:83,代码来源:IntellisenseContractsHelper.cs


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