class xxx
{
public string[] pai;
public xxx()
{
pai = new string[13];
for (int i = 0; i < 13; i++)
{
pai[i] = "100";
}
}
public string[] SetTag()
{
for (int i = 0; i < 13; i++)
{
pai[i] = GetTag();
}
return pai;
}
public string GetTag()
{
//获得随机一个tag
Random ran = new Random();
int rans = ran.Next(0, 5);
string[] str = new string[1];
if (rans==0)
{
str[0] = "0000";
}
if (rans == 1)
{
str[0] = "1111";
}
if (rans == 2)
{
str[0] = "2222";
}
if (rans == 3)
{
str[0] = "3333";
}
if (rans == 4)
{
str[0] = "4444";
}
return str[0];
}
}
奇怪的是调试的时候,最后结果是正确的。正常运行时候,结果只显示一个。
public string GetTag() //这个定义成数组,return str ;
问题应该是出在取随机数上,因为ran.next();取随机数在微秒单位内取到的数都是重复的。有两个解决方法:
1.SetTag()方法内的for循环加延时,Thread.Sleep(50);
2.Random实例化时,换一个重载方法,即每次给一个int类型的参数用来计算伪随机数序列起始值的数字,
Random ran=new Random(()=>{
byte[] bs = new byte[4];
RNGCryptoServiceProvider csp=new RNGCryptoServiceProvider();
csp.GetBytes(bs);
BitConverter.ToInt32(bs,0);
});