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

这个问题在这里已经有了答案:

  • 随机数发生器只产生一个随机数7个答案

  • 你在方法中创建了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;
    

    (你的代码的修改版本)


    你正在实例化方法中的Random对象。

    Random对象从系统时钟开始播种,这意味着如果您连续多次调用您的方法,它将每次使用相同的种子,这意味着它会生成相同的随机数序列,这意味着你会得到相同的字符串。

    为了解决这个问题,将你的Random实例移动到方法本身之外(并且当你在它的时候,你可以摆脱对ConvertFloorNextDouble疯狂的调用序列):

    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);
    }
    

    //非常简单的实现

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

    //现在只需调用RandomStr()方法

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

    上一篇: Random String Generator Returning Same String

    下一篇: How Random is System.Guid.NewGuid()? (Take two)