Random String Generator Returning Same String

This question already has an answer here:

  • Random number generator only generating one random number 7 answers

  • You're making the Random instance in the method, which causes it to return the same values when called in quick succession. I would do something like this:

    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;
    

    (modified version of your code)


    You're instantiating the Random object inside your method.

    The Random object is seeded from the system clock, which means that if you call your method several times in quick succession it'll use the same seed each time, which means that it'll generate the same sequence of random numbers, which means that you'll get the same string.

    To solve the problem, move your Random instance outside of the method itself (and while you're at it you could get rid of that crazy sequence of calls to Convert and Floor and NextDouble ):

    private readonly Random _rng = new Random();
    private const string _chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    private string RandomString(int size)
    {
        char[] buffer = new char[size];
    
        for (int i = 0; i < size; i++)
        {
            buffer[i] = _chars[_rng.Next(_chars.Length)];
        }
        return new string(buffer);
    }
    

    //A very Simple implementation

    using System.IO;   
    public static string RandomStr()
    
    {
        string rStr = Path.GetRandomFileName();
        rStr = rStr.Replace(".", ""); // For Removing the .
        return rStr;
    }
    

    //Now just call RandomStr() Method

    链接地址: http://www.djcxy.com/p/17716.html

    上一篇: 我如何在C#中生成随机字母数字字符串?

    下一篇: 随机串生成器返回相同的字符串