关于Random随机
前段时间需要写个随机函数,于是就有了下面的这个方法.
1public string CreateSerialNo()
2{
3 string serial_No="";
4 int len;
5 string r;
6 serial_No = DateTime.Now.ToString("MMdd");
7 Random rnd = new Random;
8 r = rnd.Next(99999999).ToString();
9
10 len = r.Length;
11 if(len<8)
12 {
13 for(int ii=1;ii<=(8-len);ii++)
14 r = "0"+r;
15 }
16 return serial_No+r;
17}
2{
3 string serial_No="";
4 int len;
5 string r;
6 serial_No = DateTime.Now.ToString("MMdd");
7 Random rnd = new Random;
8 r = rnd.Next(99999999).ToString();
9
10 len = r.Length;
11 if(len<8)
12 {
13 for(int ii=1;ii<=(8-len);ii++)
14 r = "0"+r;
15 }
16 return serial_No+r;
17}
然后当外部循环调用这个方法的时候,竟然产生了相同的随机字符串
1for(int i=1;i<=10;i++)
2{
3 CreateSeriaNo();
4}
2{
3 CreateSeriaNo();
4}
但是偶尔也会产生两组不同的随机字符串,无奈下翻看了msdn帮助文档,
上面说到,循环调用同一Random实例将产生同一随机数(不知道我理解的是否正确)
然而拿来对照我的方法,似乎也不符合我的情况啊,毕竟我是在外部循环调用方法,而并非在方法中
循环调用同一随机种子,怎么会生成一样的随机数呢?并且偶尔的几次会长生两样的呢?百思不得其解
最后因为赶时间,也没去研究它了,想到了一个临时解决得方法
将循环种子做为参数传递进来,具体方法如下:
1public string CreateSerialNo(Random rnd)
2{
3 string serial_No="";
4 int len;
5 string r;
6 serial_No = DateTime.Now.ToString("MMdd");
7
8 r = rnd.Next(99999999).ToString();
9
10 len = r.Length;
11 if(len<8)
12 {
13 for(int ii=1;ii<=(8-len);ii++)
14 r = "0"+r;
15 }
16 return serial_No+r;
17}
2{
3 string serial_No="";
4 int len;
5 string r;
6 serial_No = DateTime.Now.ToString("MMdd");
7
8 r = rnd.Next(99999999).ToString();
9
10 len = r.Length;
11 if(len<8)
12 {
13 for(int ii=1;ii<=(8-len);ii++)
14 r = "0"+r;
15 }
16 return serial_No+r;
17}
如此,程序方能正常得按我得要求执行,这里希望能哪位大侠路过得时候指定下迷津..感激不尽~~!