【问题标题】:Convert String to custom Class Type in Vb.net在 Vb.net 中将字符串转换为自定义类类型
【发布时间】:2012-11-07 05:20:42
【问题描述】:

我发现的大多数搜索结果都与我正在寻找的结果相反,所以这是我的问题:

我正在尝试将系统类型转换为我自己的自定义类型,但正如我所提到的,我的搜索结果并不有效,并且与我正在寻找的结果相反。

假设我有一个“mystringgoeshere”字符串和一个类似的类:

Class MyStringType

    Dim str As String

End Class
Dim s As MyStringType = "mystringgoeshere"

我收到此错误 {“String”类型的值无法转换为“Project1.MyStringType”。}

我还没有任何代码,因为我不知道如何实现这一点,但基本上我想要做的是使用我在代码中的方法设置“s”对象的“str”字符串上面的块。我试过使用“new(data as String)”子例程,但它不适用于我正在尝试的内容。

有什么想法吗?谢谢~

【问题讨论】:

    标签: vb.net inheritance subclassing


    【解决方案1】:

    看着这个VBCity Article on creating Custom Types 它正在使用Widening 运算符。

    来自上一个链接:

    扩展转换始终在运行时成功,并且不会导致数据丢失。示例是 Single 到 Double、Char 到 String 以及派生类型到其基类型。

    所以试试这样的

    Public Class Form1
    
        Public Sub New()
    
            ' This call is required by the designer.
            InitializeComponent()
    
            ' Add any initialization after the InitializeComponent() call.
            Dim s As MyStringType = "mystringgoeshere"
            Dim s1 As MyStringType = "Hello"
            Dim s2 As MyStringType = s1 + s
        End Sub
    End Class
    
    Class MyStringType
        Private _string As String
        Private Sub New(ByVal value As String)
            Me._string = value
        End Sub
        Public Shared Widening Operator CType(ByVal value As String) As MyStringType
            Return New MyStringType(value)
        End Operator
        Public Overrides Function ToString() As String
            Return _string
        End Function
        Public Shared Operator +(ByVal s1 As MyStringType, s2 As MyStringType) As MyStringType
            Dim temp As String = s1._string + s2._string
            Return New MyStringType(temp)
        End Operator
    End Class
    

    【讨论】:

    • 效果很好!谢谢一堆~!顺便说一句,我会改变什么来做这样的事情-> Dim s as MyStringType = "566" + "98" (这将导致将两个字符串传递给我的类进行处理)对于这个设置来说太复杂了吗?
    • @user1666788 现在您的第二个示例将组合两个字符串并创建一个等于“56698”的 MyStringType。如果您想使用 MyStringTypes 执行此操作,则必须覆盖 + 运算符。如果你想要一些不同的东西,你需要多解释一下你想要什么。
    • 太酷了!是的,这就是我的想法。(这个项目可能看起来很乏味,但它实际上是我想到的一个更复杂的项目,它实际上处理我的自定义类型的数学以添加/除/减或你有什么)谢谢一堆你的帮助我很感激:)
    • @user1666788 我添加了 + 运算符覆盖代码来回答,看看这是不是你想要的。
    【解决方案2】:
    只需像这样更改您的代码: 类 MyStringType 暗淡 str 作为字符串 子新(ByVal str1 作为字符串) str = str 结束子 结束类 Dim s As New MyStringType("abhi")

    【讨论】:

    • 在某些情况下确实可行,但我想在我的类型上使用数学等,而不仅仅是最初将其设置为某个值。但你很高兴尝试:)
    【解决方案3】:

    你应该做的是

    Class MyStringType
    
        Dim str As String
    
    End Class
    Dim s As MyStringType 
    s.str = "mystringgoeshere"
    

    【讨论】:

    • 这篇文章是为了解决这个问题。
    【解决方案4】:

    听起来您想继承 System.String。这是 OOP 编程的基础。继承很重要。

    http://en.m.wikipedia.org/wiki/Inheritance_(object-oriented_programming)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-04
      • 2013-11-27
      • 2020-03-17
      • 2019-11-22
      • 2017-06-22
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多