C# 实现VisualStudioIntelliSense
我正在尝试将Intellisense添加到基于richtextbox控件的C代码编辑器中。到目前为止,我已经通过解析输入的文本找到了所有变量及其类型(效果很好)。下拉框工作正常。我无法获得下拉列表框的正确选项列表 如何以编程方式获取以下列表: 我已经编译了一个变量及其类型的列表,因此当用户按下C# 实现VisualStudioIntelliSense,c#,intellisense,C#,Intellisense,我正在尝试将Intellisense添加到基于richtextbox控件的C代码编辑器中。到目前为止,我已经通过解析输入的文本找到了所有变量及其类型(效果很好)。下拉框工作正常。我无法获得下拉列表框的正确选项列表 如何以编程方式获取以下列表: 我已经编译了一个变量及其类型的列表,因此当用户按下时,我知道我有一个c类型Color的变量。我只需要知道调用什么函数来获取下拉框所需的列表 我尝试过此代码:但无法使其正常工作。我还阅读了大量关于StackOverflow的其他线程,但都没有用。我真的很想
时,我知道我有一个c
类型Color
的变量。我只需要知道调用什么函数来获取下拉框所需的列表
我尝试过此代码:但无法使其正常工作。我还阅读了大量关于StackOverflow的其他线程,但都没有用。我真的很想完成这个,而不是使用其他人的下拉编辑器组件
如有任何提示,将不胜感激。谢谢。如果您知道该类型,您应该能够反思该类型并获得所需的所有信息 这可能是你最好的选择。您可能还需要第二次调用来获取任何静态方法:
var instanceMembers = typeof(Color)
.GetMembers(BindingFlags.Instance | BindingFlags.Public);
var staticMembers = typeof(Color)
.GetMembers(BindingFlags.Static | BindingFlags.Public);
每个MemberInfo对象将能够告诉您MemberType(属性、字段、方法、事件等)
当用户键入变量(如示例中的
c
)时,只需使用instanceMembers
,然后使用
,当用户键入类型名称(如示例中的Color
)时,使用staticMembers
)然后是
,假设您有一个包含类型的名称表,这将为您提供一个良好的开端:
var type = _names[name].Type;
var members = type.GetMembers(); // Check context to grab private methods?
因此,您可以扩展您的名称表以包括:
Type
Context
Members
你会想在某种程度上使用反射。如果您有类型或类型名称,则可以获得一个
type
实例
例如,Type.GetType(“System.Int32”)
然后可以对该Type
对象调用Type.GetMembers()
,请参见此处:
…您将拥有一个MemberInfo
对象数组,这些对象具有名称(.name
)、成员类型(.MemberType
)以及其他信息,如参数列表
希望有帮助。我将名称和类型存储为一对字符串。@BoltBait-您可能希望创建一个好的结构,并将该类型保存为
类型
实例。谢谢。存储Type
使它更容易。是的,我相信,Type.GetFields()、Type.GetConstructors()和Type.GetEvents()将是需要的其他调用。@Nate Dudek-所有这些都可以通过调用GetMembers来处理。@Nate Dudek-是的。只需查看类成员的任何MSDN文档页面,就可以了解哪些符合条件。ObservaleCollection是一个很好的方法:我调用GetMembers时缺少的是BindingFlags。谢谢哦,我想看看是否有人知道如何连接到现有的intellisense实现,而不是重新实现:)出于兴趣,我很惊讶你没有自然地得出Type.GetMembers结论。你知道你需要关于类型的信息,那么为什么不看看类型类呢?@Kieren Johnstone:那是我第一次尝试,但是我得到了错误的结果。列表正在填充,就好像我键入了Color.
而不是变量名一样。所以,我认为我走错了方向。