如何制作长度为5的随机数字和字母串?

Ian*_*erg 19 c# string random

可能重复:
这是生成一串随机字符的好方法吗?
如何在C#中生成随机的8个字符,字母数字字符串?

这是我到目前为止的代码.

    private void button1_Click(object sender, EventArgs e)
    {
        string rand1 = RandomString(5);
        string rand2 = RandomString(5);
        string rand3 = RandomString(5);
        string rand4 = RandomString(5);
        string rand5 = RandomString(5);
        textBox1.Text = rand1 + "-" + rand2 + "-" + rand3 + "-" + rand4 + "-" + rand5;

    }
    private static Random random = new Random((int)DateTime.Now.Ticks);
    private string RandomString(int Size)
    {
        StringBuilder builder = new StringBuilder();
        char ch;
        for (int i = 0; i < Size; i++)
        {
            ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
            builder.Append(ch);
        }
        return builder.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

但它只是创建一个5个字符的随机字符串.我希望它创建一个由5个字符和整数组成的字符串.我该怎么做?提前致谢!

Bro*_*ass 45

使用输入数组从以下位置绘制值:

private static string RandomString(int length)
{
    const string pool = "abcdefghijklmnopqrstuvwxyz0123456789";
    var builder = new StringBuilder();

    for (var i = 0; i < length; i++)
    {
        var c = pool[random.Next(0, pool.Length)];
        builder.Append(c);
    }

    return builder.ToString();
}
Run Code Online (Sandbox Code Playgroud)

或者(不可避免的)Linq解决方案:

private static string RandomString(int length)
{
    const string pool = "abcdefghijklmnopqrstuvwxyz0123456789";
    var chars = Enumerable.Range(0, length)
        .Select(x => pool[random.Next(0, pool.Length)]);
    return new string(chars.ToArray());
}
Run Code Online (Sandbox Code Playgroud)

  • 我不知道这是不是一个问题,但也许值得指出的是,你的代码会选择字母而不是数字. (2认同)

Oha*_*der 19

从jon双向飞碟的回答中复制... /sf/answers/68367211/

Random rand = new Random();

public const string Alphabet = 
"abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

public string GenerateString(int size)
{
    char[] chars = new char[size];
    for (int i=0; i < size; i++)
    {
        chars[i] = Alphabet[rand.Next(Alphabet.Length)];
    }
    return new string(chars);
}
Run Code Online (Sandbox Code Playgroud)

  • +1此方法的速度大约是标记答案的两倍.对于10米的结果,@ BrokenGlass = 0.4148740 - @ OhadSchneider = 0.02963571 (8认同)
  • 我说我从他的答案中复制*,而不是他的答案.从老年退休金计划的问题来看,我相信我已经改变了它,对他有所帮助. (6认同)