发现一个问题。
假如,写一个类,这个类就只有一个方法,就是返回一个随机数,以下是类的代码
public class TextCC
{
public string ABCD()
{
Random r = new Random();
int A = r.Next(0, 32);
return A.ToString();
}
}
然后,我们现在放置一个按钮,通过按钮来调用这个类。
那么问题来了
假如,我是使用循环调用,代码如下
private void button1_Click(object sender, EventArgs e)
{
TextCC CC = new TextCC();
for (int i = 0; i < 70; i++)
{
richTextBox1.AppendText(CC.ABCD().ToString() + "/");
}
}
那么返回的结果,就很奇怪。就是这样
但如果,不适用循环,代码如下
private void button1_Click(object sender, EventArgs e)
{
TextCC CC = new TextCC();
richTextBox1.AppendText(CC.ABCD().ToString() + "/");
}
返回的结果,就特别正常,全是随机的
就算把引用,放进循环里,代码如下
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 70; i++)
{
TextCC CC = new TextCC();
richTextBox1.AppendText(CC.ABCD().ToString() + "/");
}
}
返回的结果,也是一样的很奇怪
我就没搞懂为什么?为啥单点就正常,遍历就不正常?哪怕我把new放进遍历里,也不正常,啥意思啊。是不是遍历太快了,类还没来得及释放就又被调用了,导致结果出问题!
C#生成随机数和计算的时间有关系 如果需要随机的话
可以加一个暂停代码 试试
private void button1_Click(object sender, EventArgs e)
{
TextCC CC = new TextCC();
for (int i = 0; i < 70; i++)
{
richTextBox1.AppendText(CC.ABCD().ToString() + "/");
Thread.Sleep(300);
}
}
```c#
```
Random r = new Random(); 使用默认种子产生随机数。而这个默认种子跟时间有关系,在循环中,因为速度快,这个默认种子没有来得及改变,那么得到的随机数也是一样的。
如果计算机运行速度很快,如果触发 Randm 函数间隔时间很短,就有可能造成产生一样的随机数
http://c.biancheng.net/view/2830.html
相同的种子将产生相同的伪随机数序列
new Random(Guid.NewGuid().GetHashCode())
确保每次都使用不同的种子