我对随机函数有疑问。
我正在尝试创建一个包含10个随机字母/数字的字符串。
但是,当我运行函数时,我连续10次得到相同的字符串。这取决于什么?在这种情况下如何真正创建随机字符串?
void testfunction()
{
for (int i = 0; i < 10; i++)
{
String randomname = getRandomLetterNumbers(10);
listBox1.Items.Add(randomname);
}
}
public String getRandomLetterNumbers(int nrLetterNumbers)
{
String letters = "abcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random(); String str = ""; int rand = 0;
for (int i = 0; i < nrLetterNumbers; i++)
{
rand = random.Next(0, letters.Length);
str = str + letters.Substring(rand, 1);
}
return str;
}
答案 0 :(得分:0)
您需要在类级别移动随机实例化,否则您将获得相同的随机数(有关说明,请参见重复项)。
此外,您无需调用子字符串,可以使用char索引器。
private Random random = new Random();
public String getRandomLetterNumbers(int nrLetterNumbers)
{
String letters = "abcdefghijklmnopqrstuvwxyz0123456789";
String str = "";
int rand = 0;
for ( int i = 0; i < nrLetterNumbers; i++ )
{
rand = random.Next(0, letters.Length);
str = str + letters[rand];
}
return str;
}
结果:
l7jvgw77rf
e8h6i6bg1q
2jz8alaf7q
2k1rh5byqo
esgcmdy0f5
sjmhvbilu4
v29bm4gzym
4nznljdwv7
xk9c8s7u6f
wzev2msf0s
如果您打算多次生成长字符串,则可以使用StringBuilder而不是字符串连接,这样可以避免每次添加字符时都复制字符串项:
using System.Text;
private string letters = "abcdefghijklmnopqrstuvwxyz0123456789";
public string GetRandomLetterNumbers(int nrLetterNumbers)
{
var builder = new StringBuilder(nrLetterNumbers);
for ( int i = 0; i < nrLetterNumbers; i++ )
{
builder.Append(letters[random.Next(0, letters.Length)]);
}
return builder.ToString();
}