【问题标题】:Type Casting Issue, I'm not able to use the type members类型转换问题,我无法使用类型成员
【发布时间】:2014-01-14 09:53:03
【问题描述】:

我编写了一个自己的类型,当我尝试将自己的类型转换为对象时,我想使用该类型所具有的属性成员。

我已尝试使用 CtypeDirectCast/TryCast,但 Intellisense 没有向我显示类型成员,因此我无法使用它。

所以...有办法做到这一点吗?这是我正在使用的代码(见注释行):

private sub SomeSub

    ' I declare a variable as Object/Undefined type, I couldn't change this.
    Dim SomeVar As Object = Nothing

    select case SomeEnumValue

        case SomeEnum.Value1
            SomeVar = CStr("Some String") ' A String type

        case SomeEnum.Value2
            SomeVar = CLng(1L) ' A Long type

        case SomeEnum.Value3
            SomeVar = CType(SomeVar, MyOwntype) ' My Own Type

            ' So here I would like to be able to use the object members,
            ' instead of the need to use Ctype like this:

            SomeControl.Text = CType(SomeVar, MyOwntype).Property

    end select

end sub

【问题讨论】:

    标签: .net vb.net types casting intellisense


    【解决方案1】:

    您可以将 CType 结果存储在局部变量中并使用它来访问您的属性

    Dim myObj As MyOwnType = CType(SomeVar, MyOwnType)
    SomeControl.Text = myObj.Property
    

    【讨论】:

    • 我试图简化代码以不创建新变量,但似乎这是唯一的方法,谢谢。 PS:对不起我的英语。
    【解决方案2】:

    请记住,强制转换引用类型的对象并不会真正转换该对象。所有投射所做的都是改变您访问对象的镜头(界面)。考虑到这一点,以下行完全没用:

    SomeVar = CType(action, MyOwntype)
    

    SomeVarAs Object,因此,在设置SomeVar 之前先将对象转换为任何特定类型是没有意义的。一旦SomeVar 指向它,它将查看它As Object,而不管之前通过哪个界面查看/引用它。

    做你想做的事情的方法是创建一个特定类型的新变量并将该变量设置为对象。如果你有Option Strict On,你很可能应该这样做,你需要在设置变量时强制转换它。但是,一旦设置了变量,就可以通过该变量访问对象(具有完整的智能感知),而无需每次都重新转换。例如:

    Dim mySpecificVar As MyOwnType = DirectCast(action, MyOwnType)
    SomeControl.Text = mySpecificVar.Property
    ' ...
    

    【讨论】:

      【解决方案3】:

      如果你想使用这些属性,你必须将它转换回类型MyOwnType,如:

      SomeControl.Text = DirectCast(SomeVar, MyOwntype).Property
      

      您不能单独使用SomeVar,因为它的类型为Object,没有您的自定义属性。

      【讨论】:

      • 那么真的没有办法在设计时“改变”类型来告诉VS-IDE变量类型已经改变了吗?
      • @ElektroStudios VB.NET 是静态类型的,因此一旦定义变量类型就无法更改。
      猜你喜欢
      • 2020-07-18
      • 2018-08-16
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      相关资源
      最近更新 更多