Random()创建相同的随机字母和数字

时间:2019-11-08 22:33:55

标签: c# random

我对随机函数有疑问。

我正在尝试创建一个包含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;
}

1 个答案:

答案 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();
}