c# return 一个字符串数组 结果只返回第一个结果 其他默认没有变化 在线等

  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);

});