在静态方法中生成随机值似乎缓存

JL.*_*JL. -1 c#

我在静态类中有一个静态方法,它可以生成随机字符串,如下所示:

public static class DataGenerator
    {
        public static string GenerateRandomString(int length)
        {
            const string Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            var random = new Random();
            return new string(
                Enumerable.Repeat(Chars, length)
                    .Select(s => s[random.Next(s.Length)])
                    .ToArray());
        }
}
Run Code Online (Sandbox Code Playgroud)

当我从同一个调用函数多次调用此方法时,它似乎缓存生成的字符串.

以下是一个用法示例:

var item = new CodeDescActivePo()
                {
                    Active = true, 
                    Code = DataGenerator.GenerateRandomString(10), 
                    Description = DataGenerator.GenerateRandomString(10)
                };
Run Code Online (Sandbox Code Playgroud)

请注意,有两个对GenerateRandomString的调用,我希望有两个唯一的随机数,在这种情况下,代码和描述总是相同的.

为什么GenerateRandomString每次都不会生成一个新的随机数?

Nat*_*per 9

var random = new Random();在一起快速呼唤.由于默认种子是基于时间的,因此种子是相同的.最好在Random.Next()每次需要时创建此变量.

public static class DataGenerator
{
    private readonly static Random random = new Random();

    public static string GenerateRandomString(int length)
    {
       //etc etc using random.Next()
    }
}
Run Code Online (Sandbox Code Playgroud)