首页 > 解决方案 > 一旦知道特定的变量类型,如何让 IntelliSense 更改列表成员?

问题描述

我正在使用 VB.net 在 Visual Studio 中为 Autodesk Inventor 编写插件。有许多不同类型的文档。当我知道文档的类型时,我希望 IntelliSense 列出该文档的成员。有没有办法做到这一点而无需Dim-ing 一个全新的变量?

Sub Test(o_Doc As Inventor.Document)

    Select Case True
        Case TypeOf o_Doc Is AssemblyDocument, TypeOf o_Doc Is PartDocument
            o_Doc.  ' Intellisense lists the members for Inventor.Document
    End Select

End Sub

输入后o_Doc,我按句号,它会列出Inventor.Document. 和都共享一个成员AssemblyDocument,但并非每种类型的文档都如此。有没有办法列出所有成员,而不必在运算符之后插入?PartDocumentComponentDefinitionAssemblyDocumentCase

Dim _AssemblyDocument as Inventor.AssemblyDocument= o_Doc
_AssemblyDocument. ' lists all the members of AssemblyDocument

编辑:将 Dim _AssemblyDocument 作为 Inventor.Document 更改为 AssemblyDocument

标签: vb.netvisual-studiointellisense

解决方案


我想说不,但从技术上讲,如果你只是在寻找一种在不声明新变量的情况下获得智能感知的方法,你可以强制转换,

Sub Test(o_Doc As Inventor.Document)
    Select Case True
        Case TypeOf o_Doc Is AssemblyDocument
            DirectCast(o_Doc, AssemblyDocument). ' AssemblyDocument intellisense
        Case TypeOf o_Doc Is PartDocument
            ' or if you access more than one member, With might be easier
            With DirectCast(o_Doc, PartDocument)
                . ' PartDocument intellisense 1
                . ' PartDocument intellisense 2
            End With
    End Select
End Sub

但现在你有单独的案例。

同样,继承链中是否还有另一个类?

  • Inventor.Document
    • 另一个类/接口
      • 组装文件
      • 零件文件

我觉得很奇怪派生类会共享未在其基类或接口中声明的成员。如果它们确实共享另一个公共类或接口,那么您可以对其进行测试并转换为它,并且对于这两种类型只有一个案例。


推荐阅读