C# Random()为每个调用生成相同的结果 公共字符串 { 得到 { 整数长度=10; 随机=新随机(); string chars=“123456789abcdefghijklmnpqrstuvwxyzabdfghijklmnpqrstuvwxz”; StringBuilder=新的StringBuilder(长度); for(int i=0;i

C# Random()为每个调用生成相同的结果 公共字符串 { 得到 { 整数长度=10; 随机=新随机(); string chars=“123456789abcdefghijklmnpqrstuvwxyzabdfghijklmnpqrstuvwxz”; StringBuilder=新的StringBuilder(长度); for(int i=0;i,c#,asp.net,C#,Asp.net,我原以为每次调用的结果都会不同,但它返回相同的结果值。 怎么可能呢? 分配变量后,get方法将不会再次运行?来自: 随机数生成从种子值开始。如果重复使用同一种子,则生成相同的数字序列。产生不同序列的一种方法是使种子值与时间相关,从而产生一个不同的序列,每个新的随机序列实例 默认情况下,Random类的无参数构造函数使用系统时钟生成其种子值,而其参数化构造函数可以根据当前时间的节拍数获取Int32值。但是,由于时钟的分辨率有限,因此使用无参数构造函数创建不同的连续随机对象会创建随机数生成器,生成相

我原以为每次调用的结果都会不同,但它返回相同的结果值。 怎么可能呢? 分配变量后,get方法将不会再次运行?

来自:

随机数生成从种子值开始。如果重复使用同一种子,则生成相同的数字序列。产生不同序列的一种方法是使种子值与时间相关,从而产生一个不同的序列,每个新的随机序列实例

默认情况下,Random类的无参数构造函数使用系统时钟生成其种子值,而其参数化构造函数可以根据当前时间的节拍数获取Int32值。但是,由于时钟的分辨率有限,因此使用无参数构造函数创建不同的连续随机对象会创建随机数生成器,生成相同的随机数序列


如果无法使随机对象在两次调用之间保持不变,则需要在每次调用该对象时使用伪随机值对其进行种子设定

迪尔伯特在2001年也遇到了同样的问题:

巧合

我不这么认为

random.org同意:

请以后不要在标题中使用标签。我在msdnSome的文章中添加了更多的解释,以便用户不时使用一些幽默感。
public string Weird
{
    get
    {
        int length = 10;
        Random random = new Random();
        string chars = "123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXZ";
        StringBuilder builder = new StringBuilder(length);

        for (int i = 0; i < length; i++)
        {
            builder.Append(chars[random.Next(chars.Length)]);
        }

        return builder.ToString();
    }
}

Response.Write(Weird);
Response.Write("<br />");
Response.Write(Weird);
Response.Write("<br />");
Response.Write(Weird);

Result : 

9eFZ5XrJxZ
9eFZ5XrJxZ
9eFZ5XrJxZ