3

我知道我不能动态引用变量(例如,'var & var.Close()')。我可以以某种方式拥有一个可以按名称指向另一个变量的变量吗?

我当前的代码是(其中 func() 需要一个数组):

Dim playerNum As String = “P1”
Select Case playerNum
  Case “P1”
    Func(P1(x, xx))
  Case “P2”
    Func(P2(x, xx))
  .........
End Select

可以按照这些思路做一些事情吗?

Dim playerNum As varNameRef = P1(,)
Func(playerNum(x, xx))

真的能阻止如此多的重复将不胜感激。干杯。

4

2 回答 2

1

您可以通过反思来做到这一点,但出于性能、可读性和可维护性的原因,我建议您不要这样做。

如果你真的想要,你可以使用Actions(Of T),例如:

Class Player
    Public Name As String
End Class

Sub play(player As Player)
    Console.WriteLine(player.Name & " plays now")
End Sub

创建一些播放器进行演示:

Dim playerList As New List(Of Player)
For i As Int32 = 1 To 10
    Dim p = New Player() With {.Name = "P" & i}
    playerList.Add(p)
Next

playerList.ForEach(AddressOf play)    
于 2012-07-18T12:57:34.973 回答
1

您需要的是引用类型(类),而不是值类型(结构)。例如,如果您创建了一个将数组存储为属性的类,如下所示:

Public Class PlayerData
    Public Data(10, 30) As Object
End Class

这也为您提供了轻松扩展您存储的有关每个玩家的数据的优势。PlayerData然后,您可以使用多个变量引用同一个对象:

Dim player1 As New PlayerData()
Dim player2 As New PlayerData()
Dim player As PlayerData = Nothing
Select Case playerNum
    Case “P1”
        player = player1
    Case “P2”
        player = player2
End Select
Func(player.Data(x, xx))

但是,将它们作为键值对存储在字典中会更好,例如:

Dim players As New Dictionary(Of String, PlayerData)()
players("P1") = New PlayerData()
players("P2") = New PlayerData()

然后,您可以像这样访问您的玩家:

Func(players(playerNum).Data(x, xx))
于 2012-07-18T13:02:35.647 回答