Vb.net 随机数/字母生成器工作不正常

Vb.net 随机数/字母生成器工作不正常,vb.net,random,Vb.net,Random,大家好,我正试图弄明白为什么我下面的代码只为所有4/5/8变量生成相同的随机字母/数字: Public Function GenerateRandomString(ByRef iLength As Integer, Optional numberOnly As Boolean = False) As String If numberOnly Then Dim RandomClass As New Random() Dim RememberSet As Ne

大家好,我正试图弄明白为什么我下面的代码只为所有4/5/8变量生成相同的随机字母/数字:

Public Function GenerateRandomString(ByRef iLength As Integer, Optional numberOnly As Boolean = False) As String
    If numberOnly Then
        Dim RandomClass As New Random()
        Dim RememberSet As New HashSet(Of Integer)
        Dim RandomNumber As Integer

        While RememberSet.Count < 3
            RandomNumber = RandomClass.Next(1, 3)

            If RememberSet.Add(RandomNumber) Then
                Return RandomNumber
            End If
        End While
    Else
        Dim rdm As New Random()
        Dim sResult As String = ""
        Dim allowChrs() As Char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ0123456789".ToCharArray()

        For i As Integer = 0 To iLength - 1
            sResult += allowChrs(rdm.Next(0, allowChrs.Length))
        Next

        Return sResult
    End If
End Function
这就是上面代码的输出结果:

Z4Gb
Z4Gb
Z4Gb
Z4Gb5Sq28VOr
Z4Gb5Sq2
因此,您是否看到Z4Gb在每个随机生成的变量中,然后Z4Gb5Sq2812变量中


那么我做错了什么呢?

问题是每个
新的Random()
调用都得到了相同的种子。在类构造函数中创建随机对象。

使用单个随机实例(表单/类级别);你在快速的成功中创造了新的。使用相同的RND实例,我得到的代码重复了
iKd8
,它们都是不同的。它们不是使用旧的旧的VB RND函数,而是使用闪亮的新的NET
Random
类,该类
Randomize
对a yes无效。但是“闪亮的新”版本使用了分辨率非常低的种子。种子本身具有任意性和“高分辨率”:即自上次系统重新启动以来的时钟滴答数。如果是这样的话,你就不会有这种行为,不是吗?请参阅上面我的链接中的“避免多次实例化”内容。
Z4Gb
Z4Gb
Z4Gb
Z4Gb5Sq28VOr
Z4Gb5Sq2