mscorlib.dll中出现“System.StackOverflowException”错误

时间:2013-11-08 17:37:46

标签: c#

如何解决此错误?

这是我的代码

public void X()
{
    foreach (char c in txtNumbers.Text)
    {
        sum = sum + (int.Parse(c.ToString()) * int.Parse(c.ToString()));
    }

    txtNumbers.Text = (sum.ToString());
    sum = 0;

    if (txtNumbers.Text == "1")
    {
        Response.Write("happy numbers");
        return;
    } else { 
        X();
    }
}

这就是错误...

http://imageshack.com/a/img820/3553/wrzb.jpg

3 个答案:

答案 0 :(得分:5)

如果数字加起来不是“1”,你的程序将进入无限循环。和崩溃。硬。像它一样。

这是因为在else块中,您再次调用X()方法。似乎没有办法阻止你的递归,因此你的程序崩溃了。

一个简单的解决方法:

public void X()
{
        foreach (char c in txtNumbers.Text)
        {
            sum = sum + (int.Parse(c.ToString()) * int.Parse(c.ToString()));
        }

        txtNumbers.Text = (sum.ToString());
        sum = 0;

        if (txtNumbers.Text == "1")
        {
            Response.Write("happy numbers");
            return;
        }else{
             Response.Write("sad numbers");
        }
    }

另外,我建议使用TryParse()方法,但那是另一个季节。

答案 1 :(得分:0)

我认为错误是X方法以递归方式调用自身。这是堆栈溢出的根本原因,但它实际上是在int.Parse调用时触发的。您需要更改其他逻辑,以便在不终止

的情况下不会分支到X()

答案 2 :(得分:0)

如果txtNumbers.Text永远不是"1",那么在您获得StackOverflowException之前,您将继续递归。仅仅因为X()txtNumbers.Text不同时调用"1"