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 に答える