在vb.net中拆分'RockPaperScissors.Paper'字符串以便检索'Rock'

时间:2012-12-20 23:09:21

标签: vb.net string split

以下代码

player2.getWeapon.ToString()

返回

'RockPaperScissors.Rock'

OR

 'RockPaperScissors.Paper'

OR

'RockPaperScissors.Scissors'

我只对类名感兴趣,即Rock,Paper或Scissors。我怎样才能做到这一点?

斯普利特是我想到的,但不确定它是否是最好的。

3 个答案:

答案 0 :(得分:3)

是的,string.Split似乎是合适的方式:

Dim tokens As String() = player2.getWeapon.ToString().Split("."c)
Dim className As String = tokens.Last() ' or simply tokens(1) without Linq

但是,如果您可以使用直接返回它的属性扩展您的Weapon类,那么我会这样做。

答案 1 :(得分:1)

如果你真的不想使用Split(),你可以使用IndexOf(性能更高)

Dim className as String    
Dim weapon = player2.getWeapon.ToString()
Dim pos as Integer = weapon.IndexOf("."c)
if pos >= 0 Then 
    className =  weapon.Substring(pos + 1)
End if

答案 2 :(得分:1)

ToString只是由基类Object类定义的常规可覆盖方法。因此,您可以轻松覆盖它以使其返回您想要的任何内容。例如:

Public Class Rock
    Public Overrides Function ToString() As String
        Return "Rock"
    End Function
End Class

或者,如果您想强制您的课程实现它,您可以在基础Weapon课程中执行此操作,如下所示:

Public Class Weapon
    Public Sub New(weaponName As String)
        _weaponName = weaponName
    End Sub

    Private _weaponName As String

    Public Overrides Function ToString() As String
        Return _weaponName
    End Function
End Class

Public Class Rock
    Inherits Weapon

    Public Sub New()
        MyBase.New("Rock")
    End Sub
End Class

或者,如果您不想在构造函数中要求它,则可以在基类中添加受保护的MustOverride Function GetWeaponName() As String,然后从ToString返回。无论哪种方式,派生类都将被强制提供名称,以便可以在ToString中返回。

我建议这样做的原因是因为我怀疑你使用这个字符串作为向用户显示的描述。如果是这种情况,它不是你想要的类名,而是武器的描述。到目前为止,它们碰巧是相同的,但从逻辑上讲,这并非总是如此。例如,如果您有一个名为SuperDuperRock的类,则您不希望将其显示给用户。相反,你希望它在文字之间用空格格式化。