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

Arrays Net使用字符串构造函数中使用的数组名称?,arrays,vb.net,.net-4.0,Arrays,Vb.net,.net 4.0,我有两组锯齿状数组,分别命名为P1到P6和Z1到Z6,它们的内容在p数组中是水果,在Z数组中是cars。我还有一个函数,可以从以下数组之一获取值: 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)

我有两组锯齿状数组,分别命名为P1到P6和Z1到Z6,它们的内容在p数组中是水果,在Z数组中是cars。我还有一个函数,可以从以下数组之一获取值:

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
五十、 在上面的代码中,由以下代码段构造:

 Dim L As String = "P" & randomizer(6)
       or
 Dim L As String = "Z" & randomizer(6)
所以,我的问题是这些都不起作用。因为L被构造为字符串,但随后被retL作为数组调用,所以它失败了。如果我试图首先将L构造为数组,它将失败。如果我尝试将其作为字符串调用,它将失败。我不知所措,不知该从哪里着手。很明显,我试图做的是可能的,但我也很明显错过了一个重要的步骤,或者我没有掌握一些基本的概念


有什么建议吗?

这里您真正想要的是一组数组。而不是:

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

现在,您的函数应该如下所示:

Dim P(5, n) As String
Dim Z(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)
您可以从当前代码中调用函数,如下所示:

Dim P(5, n) As String
Dim Z(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)

下面是一个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
使用
数组(索引)
语法通过其索引访问数组项

Next
方法周围的括号是由于
Next
在VB中是一个关键字。它们告诉VB编译器
Next
是一个标识符,而不是关键字

Random.Next(max)
返回一个介于
0
max-1
之间的整数

newstring(n){}
定义了索引范围为
0..n
的数组,从而定义了长度为
n+1
的数组


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

尽量不要将数组本身视为数据类型。避免在代码中使用关键字
Array
。相反,请始终寻找某种特定类型的数组。感谢你们两位的解释。我在问题的开场白中说错话了:上一次尝试使用数组的数组来实现这个项目时,我发现了所有关于锯齿状数组的内容,VB.net显然非常讨厌这些数组,并且认为没有人应该使用它们。我认为在这两个答案之间,我已经具备了使我的项目更进一步所需的一切。请参阅我的另一个答案(尤其是更新)。很难解释如何使用锯齿数组,因为我在您的代码中没有看到任何可以用锯齿数组完成的内容。你能用二维数组来代替你的想法吗?这将有助于我们更好地理解您的问题,并为您提供一个解决方案。顺便说一句:你的函数应该有一个返回类型,比如
公共函数retL(ByVal L作为数组)作为整数
。该函数的目的将更明确,如下所示。