VB.Net使用字符串构造函数中使用的数组名称?

时间:2012-10-18 17:50:48

标签: arrays vb.net .net-4.0

我有两组锯齿状阵列,名为P1到P6和Z1到Z6,其中的内容是P阵列中的果实和Z阵列中的汽车。我还有一个函数可以从其中一个数组中获取值:

Public Function retL(ByVal L As Array)
    Dim maxL As Integer = L.GetUpperBound(0)
    Dim numL As Integer = randomizer(maxL)
    Dim resL As String = L.GetValue(numL - 1)
    Return resL
End Function

L,在上面,由以下代码构成:

 Dim L As String = "P" & randomizer(6)
       or
 Dim L As String = "Z" & randomizer(6)

所以,我的问题是这一切都没有效果。因为L构造为一个字符串,但后来由retL作为一个数组调用,它失败了。如果我尝试将L构造为一个数组,那么它就会失败。如果我尝试将其称为字符串,则会失败。我迷失了,不知道从哪里开始。显然我想做的事情是可能的,但我显然要么错过了一个重要的步骤,要么我没有抓住一些基本的概念。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

你真正想要的是一个数组数组。而不是:

Dim P1(n) As String
Dim P2(n) As String
'... 
Dim P6(n) As String
'...
Dim Z6(n) As String

...其中'n'是数组的大小,你应该有更像这样的东西:

Dim P(5, n) As String
Dim Z(5, n) As String

请注意,我使用了5而不是6,因为在VB.Net数组中是零索引,而不是一个索引,而下标是最后一项的索引,而不是项目数。因此Dim P(5, n) As String为您提供了一个二维字符串数组,在第一维上有六个项目。

现在你的功能应该是这样的:

Public Function retL(ByVal L() As String) As String
    Return L(randomizer(L.Length)-1)
End Function

你可以用你当前的代码调用这个函数:

Dim result As String = retL(P(randomizer(6) - 1)

答案 1 :(得分:0)

这是一个litle测试类,它做了几件事

Class TestRandomArrays
    Private L As String()
    Private randomizer As New Random()

    Public Sub InitializeArrayWithRandomLength()
        ' Creates an array of length between 0 and 5
        L = New String(randomizer.[Next](6) - 1) {}
    End Sub

    Public Sub FillArrayWithRandomText()
        For i As Integer = 0 To L.Length - 1
            L(i) = "P" & randomizer.[Next]()
        Next
    End Sub

    Public Function ReturnRandomArrayItem() As String
        Return L(randomizer.[Next](L.Length))
    End Function
End Class

使用array(index)语法通过索引访问数组项。

Next方法的括号是因为Next是VB中的关键字。他们告诉VB编译器Next是一个标识符而不是关键字。

Random.Next(max)返回0max-1之间的整数。

New String(n) {}定义一个索引范围为0..n的数组,因此定义了一个长度为n+1的数组。

这不是锯齿状阵列。锯齿状数组是一个数组数组,即结果变量将具有(至少)两个维度。