-1
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

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

4

3 回答 3

4

来自http://msdn.microsoft.com/en-us/library/system.random.aspx

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

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

于 2013-07-18T20:18:14.403 回答
0

如果您不能使 Random 对象在调用之间保持不变,则每次调用时都需要使用伪随机值对其进行播种。

于 2013-07-18T20:18:33.120 回答
-2

Dilbert 在 2001 年也遇到过同样的问题:

http://dilbert.com/strips/comic/2001-10-25/

巧合?

我不这么认为。

并且 random.org 同意: http ://www.random.org/analysis/

于 2013-10-15T21:04:40.157 回答