System.StackOverflowException C#

System.StackOverflowException C#,c#,recursion,model-view-controller,stack-overflow,C#,Recursion,Model View Controller,Stack Overflow,我如何绕过stackoverflow异常,或者有更好的方法吗?非常感谢您的帮助 public MetricItemDetail GetData(int itemId, int itemTwoId) { //some of my code goes here.. try { return new Class {

我如何绕过stackoverflow异常,或者有更好的方法吗?非常感谢您的帮助

public MetricItemDetail GetData(int itemId, int itemTwoId)
{

        //some of my code goes here..

         try
                {
                    return new Class
                    {
                        Value = GetItemDetails(itemId, itemIdTwo)

                    };
                }
                catch (Exception e)
                {
                    Console.WriteLine("{0} Exception caught.", e);
                    return new Class();
                }

}

public double GetItemDetails(int itemId, int itemTwoId)
{

   var currentValue = GetData(itemId, itemTwoId); // The problem is here..this is where I get the stackoverflow exception

}

GetItemDetails和GetData方法是相互调用的,它会导致“无限”循环,每个调用都有堆栈分配,不幸的是堆栈大小不是无限的;)

请参阅此处的更多详细信息:


StackOverflowException不能被忽略,不能被捕获,必须避免。它的存在是为了保护.NET运行时免受致命的崩溃。

我的意思是,你陷入了一个无限循环…
GetItemDetails
调用
GetData
,调用
GetItemDetails
。看到问题了吗?
有更好的方法吗?
如果你说的“这”是指导致堆栈溢出,那么没有,你已经解决了!是的,这就是为什么我要问是否有办法绕过stackoverflow异常。我知道问题是什么@JeroenMostert你的问题中绝对没有任何信息。你想达到什么目标?逻辑在哪里?
不幸的是,堆栈大小不是无限的
,这不是我对这个问题的印象。更像是:“在某个时刻你必须告诉程序该做什么”@coffeetime不必生气,我要指出的是,这个答案是“有限的堆栈大小”,如“如果你将其增加到infinte,问题就解决了”不是这个问题的正确印象。stackoverflow通常是在“代码中没有逻辑”并且程序没有被告知要做什么,并且程序没有任何目的地继续乒乓球时引起的。我现在理解,给定的代码应该演示stackowerflow原理,而不是工作代码。您可以尝试扩大堆栈内存并使用旧版本的.NET运行时(例如1.1),该版本对异步异常(如StackOverflowException或OutOfMemoryException)更不敏感,并允许捕获和绕过它们,风险自负。