随机不好用

Yac*_*cov 1 c# random algorithm

我生成一个包含62个选项的字符串^ 6个字母= 56,800,235,584

但是在运行代码时,它会重复相同的字符串,然后每200,200次重复一次

这里有什么问题?

顺便说一句:这段代码基于这里的答案

class Program
{
    static void Main(string[] args)
    {
        var d = new Dictionary<string, bool>();

        for (int i = 0; ; i++)
        {
            var s = GenerateString(6);
            try
            {
                d.Add(s, false);
            }
            catch (Exception ex)
            {
                Console.WriteLine(String.Format("{0} - {1} - {2}", i, s, ex.Message));
                i = 0;
            }
        }

        Console.ReadKey();
    }


    static Random _rnd = new Random();
    public static string GenerateString(int len)
    {
        const string bigLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        const string smallLetters = "abcdefghijklmnopqrstuvwxyz";
        const string numbers = "1234567890";

        var validChars = bigLetters + smallLetters + numbers;

        var result = new StringBuilder();

        for (int i = 0; i < len; i++)
        {
            result.Append(validChars[_rnd.Next(validChars.Length)]);
        }

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

Mit*_*tli 6

随机都可以.

这个问题与生日悖论有关.当你有20万件物品时,其中一件可以重复.

随机字符串并不保证始终是唯一的结果.要获得独特的结果,您应该使用GUID.