VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • C#教程之Roslyn如何实现简单的代码提示

    假如需要实现一个代码编辑器,其中一个很重要的功能是实现代码提示,类似VS的代码智能提示。下面用Roslyn编译器来实现一个简单的代码提示功能。

代码提示,首先必须需要知道对象的类型信息,然后通过迭代获取成员。

   

复制代码
 1 static void Main(string[] args)
 2  {
 3 
 4             var code = @"
 5     using System;
 6     public class _RoslynCodeCompletionSample
 7     {
 8         public void MyMethod()
 9         {
10             var datetime = DateTime.Now;
11             datetime.
12         }
13     }";
14             //Microsoft.CodeAnalysis.CSharp namespace
15             var syntaxTree = CSharpSyntaxTree.ParseText(code);
16             //引入 DateTime 需要的程序集
17             var cscompilation =CSharpCompilation.Create("_RoslynCodeCompletionSample")
18                 .AddReferences(MetadataReference.CreateFromAssembly(typeof(DateTime).Assembly))
19                 .AddSyntaxTrees(syntaxTree);
20             var semanticModel = cscompilation.GetSemanticModel(syntaxTree);
21             //获取代码提示 datetime.中.的TextSpan对象
22             string codeIndex = "datetime.";
23             var dotTextSpan = new TextSpan(code.IndexOf(codeIndex) + codeIndex.Length-1, 1);
24             var memberAccessNode = (MemberAccessExpressionSyntax)syntaxTree.GetRoot()
25                 .DescendantNodes(dotTextSpan).Last();
26             //获取类型信息
27             var lhsType = semanticModel.GetTypeInfo(memberAccessNode.Expression).Type;
28             //获取代码提示的内容
29             foreach (var symbol in lhsType.GetMembers())
30             {
31                 if (!symbol.CanBeReferencedByName
32                     || symbol.DeclaredAccessibility != Accessibility.Public
33                     || symbol.IsStatic)
34                     continue;
35 
36                 Console.WriteLine(symbol.Name);
37             }
38             Console.ReadLine();
39 }
复制代码

水平有限,望各位园友不吝赐教!如果觉得不错,请点击推荐和关注! 
出处:http://www.cnblogs.com/isaboy/ 
声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 
分类: C#


相关教程