1

必须从数组列表中选择一个随机数,以从数据库中生成正确的信息,此时它在 rnd 行上的窃听

    Dim rn As New List(Of Integer)
    Dim QPass As String
    rn.Add(71)
    rn.Add(72)
    rn.Add(79)
    rn.Add(80)
    Dim index As Integer = CInt(Math.Floor(Rnd() * 4))
    Dim randomValue As Integer = CInt(rn(index))
    QPass = randomValue.ToString()
    Session("Pt2") = rn
    PT2imgImage.ImageUrl = "showImage.ashx?i=" + QPass
    PT2imgImage.Width = Unit.Pixel(600)
4

2 回答 2

3

这里

rn = rn(Rnd() * 4)

您试图将一个整数(从 ArrayList 中选择的值)放入声明为 ArrayList 的变量中。那是行不通的。使用新变量:

Dim index As Integer = CInt(Math.Floor(Rnd() * 4))
Dim randomValue As Integer = CInt(rn(index))

QPass = randomValue.ToString()
Session("Pt2") = randomValue

CInt(Math.Floor(...))确保从返回的浮点值Rnd() * 4正确向下舍入并转换为整数,然后可用于索引数组列表。最终,您可能希望用更 .NET 的方式替换它以获取随机数(例如Random.Next)。Rnd主要是为了向后兼容。

CIntaround是必需的rn(index),因为您使用旧的、无类型ArrayList的而不是新的、闪亮的、强类型的List(Of Integer). 如果您使用后者,您可以删除外部CInt.

于 2013-02-04T16:41:00.217 回答
2
    Dim rn As New List(Of Integer)
    Dim QPass As String
    Dim rnd As New Random
    rn.Add(7)
    rn.Add(8)
    rn.Add(15)
    rn.Add(16)
    Dim randomValue As Integer = rn(Rnd.Next(0, 4))
    QPass = randomValue.ToString()

以为我会按照建议使用较新的样式

于 2013-02-06T15:14:21.070 回答