我正在做c#语言的自动完成编辑器,需要获得c#中的所有单词/方法/名称空间/属性。在谷歌上没有找到有用的东西。也尝试了反射,但无法获得所有项目,如系统或其他名称空间之后的名称空间。
有一个字典,所有这些在互联网上,或者有一个方法来做它的反射?
为例:用户正在输入System。
自动补全找到System作为命名空间,并显示其中的所有类型/方法和命名空间。
或用户正在输入Bitmap(如果我找不到Bitmap作为根类型,那么我将尝试使用XXX的所有组合)。YYY,如XXX.YYY.Bitmap…)
感谢注:请不要向我推荐MSDN,因为我已经知道它了,这将是最后也是最糟糕的选择,递归地解析MSDN上的所有信息并将其保存在数据库中。
根据@Steve Wellens的评论,c#和。net类型名是有区别的。你有两个非常不同的问题要处理:-
-
获得c#知识-将使您的编辑器了解c#关键字等。这可以在c#语言规范中找到,正如@Cody Gray的回答。这不会根据你正在编辑的特定文件的上下文而变化(除非你希望你的编辑器有选项能够限制到旧版本的c#,在这种情况下,你需要构建以前版本的规范知识)。
-
获取当前编辑上下文中可用类型的知识。为此,您需要知道在当前文件的
using
语句中声明了哪些名称空间,以及包含当前文件的项目引用了哪些库。试图在全球范围内找出每个可用库的所有信息是没有意义的,因为信息量太大并且不断变化。也许,您可以构建有关GAC中可用的所有类型名称的知识。在部分类型名的情况下,例如Bitmap
,一个简单的实现将使用文件中包含的using
语句,通过检查包含当前文件的项目引用的相关程序集来尝试确定引用的是哪个类型名(可能会发生冲突,需要用户解决,例如在部分类型名的前缀加上实际名称空间的更多元素)。这就是Visual Studio编辑器的工作原理。更丰富的实现可以检查包含当前文件的项目引用的所有程序集以及GAC中包含的所有程序集,如果需要,建议在类型名称中添加完整的名称空间或添加using
语句。这就是Resharper的工作原理
您尝试过。net框架和c#语言的MSDN文档吗?这是你能找到的最接近"互联网上所有这些东西的目录"。
你也可以阅读c#语言规范