一尘不染

随机字符串生成器返回相同的字符串

c#

我已经开发了一个随机字符串生成器,但是它的运行方式并不符合我的期望。我的目标是能够运行两次并生成两个不同的四个字符的随机字符串。但是,它只会一次生成一个四个字符的随机字符串两次。

这是代码及其输出示例:

private string RandomString(int size)
{
    StringBuilder builder = new StringBuilder();
    Random random = new Random();
    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();
}

// get 1st random string 
string Rand1 = RandomString(4);

// get 2nd random string 
string Rand2 = RandomString(4);

// create full rand string
string docNum = Rand1 + "-" + Rand2;

…输出看起来像这样:UNTE-UNTE …但是它看起来应该像这样UNTE-FWNU

如何确保两个明显随机的字符串?


阅读 319

收藏
2020-05-19

共1个答案

一尘不染

您正在方法中创建Random实例,这导致它在快速连续调用时返回相同的值。我会做这样的事情:

private static Random random = new Random((int)DateTime.Now.Ticks);//thanks to McAden
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();
    }

// get 1st random string 
string Rand1 = RandomString(4);

// get 2nd random string 
string Rand2 = RandomString(4);

// creat full rand string
string docNum = Rand1 + "-" + Rand2;

(您的代码的修改版本)

2020-05-19