Vb.net 随机数/字母生成器工作不正常
大家好,我正试图弄明白为什么我下面的代码只为所有4/5/8变量生成相同的随机字母/数字: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
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在每个随机生成的变量中,然后Z4Gb5Sq2在8和12变量中
那么我做错了什么呢?问题是每个
新的Random()
调用都得到了相同的种子。在类构造函数中创建随机对象。使用单个随机实例(表单/类级别);你在快速的成功中创造了新的。使用相同的RND实例,我得到的代码重复了iKd8
,它们都是不同的。它们不是使用旧的旧的VB RND函数,而是使用闪亮的新的NETRandom
类,该类Randomize
对a yes无效。但是“闪亮的新”版本使用了分辨率非常低的种子。种子本身具有任意性和“高分辨率”:即自上次系统重新启动以来的时钟滴答数。如果是这样的话,你就不会有这种行为,不是吗?请参阅上面我的链接中的“避免多次实例化”内容。
Z4Gb
Z4Gb
Z4Gb
Z4Gb5Sq28VOr
Z4Gb5Sq2