我正在为 VS2010 编写一个扩展,我的包实现IVsSelectionEvents
了跟踪解决方案资源管理器中的选择:
public int OnSelectionChanged(
IVsHierarchy pHierOld,
uint itemidOld,
IVsMultiItemSelect pMISOld,
ISelectionContainer pSCOld,
IVsHierarchy pHierNew,
uint itemidNew,
IVsMultiItemSelect pMISNew,
ISelectionContainer pSCNew)
{
if (pSCNew != null)
{
uint count;
pSCNew.CountObjects((uint) Constants.GETOBJS_SELECTED, out count);
object[] selectedObjects = new object[count];
pSCNew.GetObjects((uint) Constants.GETOBJS_SELECTED, count, selectedObjects);
// What is the type of this object?
var selectedItem = selectedObjects[0] as ???;
}
return VSConstants.S_OK;
}
GetObjects
填充对象数组,但我不知道这些对象的实际类型是什么。GetType
return System.__ComObject
,这不是很有帮助。我假设这些对象实现了一个已知的接口,但我怎么知道是哪一个呢?这似乎没有记录在任何地方......目前我正在使用dynamic
来访问对象的属性,但这并不理想,而且无论如何我不知道这个对象公开了哪些方法(我只能看到监视窗口中的属性)
有谁知道解决方案资源管理器中的项目项实现了哪个接口?