在不知道名称的情况下在里面设置字符串

时间:2015-09-30 01:00:52

标签: vb.net

我试图在不知道实际数字的情况下找到在For内部设置字符串值的正确方法。这是我想要做的事情,因为它可能在vb6但不确定使用vb.net

Public Class Form1

Dim iTest1 As String
Dim iTest2 As String
Dim iTest3 As String

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    For i = 1 To 3

        "iTest" & i = "aaa" & i

    Next

    Debug.Print("iTest1:" & iTest1)
    Debug.Print("iTest2:" & iTest2)
    Debug.Print("iTest3:" & iTest3)
 End Sub
End Class

2 个答案:

答案 0 :(得分:3)

尝试使用Arrays。

Dim iTest(3) As String

For i = 1 To 3
        iTest(i) = "aaa" & i
 Next

或者这个

Dim variables As New Dictionary(Of String, String)()

        For i = 1 To 3

        variables("iTest" + i.ToString) = "aaa" & i

    Next

    Console.WriteLine("iTest1:" + variables("iTest1"))
    Console.WriteLine("iTest2:" + variables("iTest2"))
    Console.WriteLine("iTest3:" + variables("iTest3"))

答案 1 :(得分:0)

这在技术上是可行的,但不是真正推荐的方法......

如果您将变量公开,那么您可以使用从VB6带来的旧版CallByName()功能:

Public Class Form1

    Public iTest1 As String
    Public iTest2 As String
    Public iTest3 As String

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        For i As Integer = 1 To 3
            CallByName(Me, "iTest" & i, CallType.Let, "aaa" & i)
        Next

        Debug.Print("iTest1:" & iTest1)
        Debug.Print("iTest2:" & iTest2)
        Debug.Print("iTest3:" & iTest3)
    End Sub

End Class

如果没有CallByName(),可以通过Reflection完成。请注意,这适用于私有或公共变量:

Public Class Form1

    Private iTest1 As String
    Private iTest2 As String
    Private iTest3 As String

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim T As Type = Me.GetType

        For i As Integer = 1 To 3
            Dim F As Reflection.FieldInfo = T.GetField("iTest" & i, Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)
            If Not IsNothing(F) Then
                F.SetValue(Me, "aaa" & i)
            End If
        Next

        Debug.Print("iTest1:" & iTest1)
        Debug.Print("iTest2:" & iTest2)
        Debug.Print("iTest3:" & iTest3)
    End Sub

End Class