asp.net 如何解决System.StackOverflowException:'Exception of type 'System.StackOverflowException' was thrown.' exception while generating random code?

ktca8awb  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(148)

我得到System.StackOverflowException:'类型'System.StackOverflowException'的异常被抛出。'当使用Random生成随机数字字符串时。

protected void btnOrder_Click(object sender, EventArgs e)
{
    string OrderId = "TEK" + CreateRandomCode(15);
}
public string CreateRandomCode(int codeCount = 15)
{
 string allChar = "0,1,2,3,4,5,6,7,8,9";
 string[] allCharArray = allChar.Split(',');
 string randomCode = "";
 int temp = -1;
 Random rand = new Random();//here I'm getting exception

 for (int i = 0; i < codeCount; i++)
 {
  if (temp != -1)
  {
   rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
  }
  int t = rand.Next(10);
  if (temp != -1 && temp == t)
  {
   return CreateRandomCode(codeCount);
  }
  temp = t;
  randomCode += allCharArray[t];
 }
 return randomCode;
}

字符串

oyjwcjzk

oyjwcjzk1#

异常的发生是因为你的代码是递归的,没有正确的基本情况(退出条件)。你可以有一个最大的递归深度。如果你超过这个深度,你会得到一个System.StackOverflowException
修改你的代码,让它有一个合适的基本情况,或者完全改变它。据我所知,你只想生成一个以TEK开头的字符串,在你的例子中,加上15个数字。
下面的代码创建了一个包含15个随机数字的字符串:

public string CreateRandomCode(int codeCount = 15)
{
 string allChar = "0,1,2,3,4,5,6,7,8,9";
 string[] allCharArray = allChar.Split(',');
 string randomCode = "";
 Random rand = new Random();
 for (int i = 0; i < codeCount; i++)
 {
  randomCode += allCharArray[rand.Next(0, allCharArray.Length)]; 
 }
 return randomCode;
}

字符串

相关问题