【发布时间】:2010-11-30 01:00:49
【问题描述】:
我使用 CSharpCodeProvider 编译我的代码,并在结果程序集中动态创建某个类的实例。比我称之为某种方法。如果该方法具有递归,我会得到 StackOverflowException 并且我的应用程序终止。
如何避免这种情况?
using System;
using System.Runtime.Remoting;
namespace TestStackOverflow
{
class Program
{
class StackOver : MarshalByRefObject
{
public void Run()
{
Run();
}
}
static void Main(string[] args)
{
AppDomain domain = AppDomain.CreateDomain("new");
ObjectHandle handle = domain.CreateInstance(typeof (StackOver).Assembly.FullName, typeof (StackOver).FullName);
if (handle != null)
{
StackOver stack = (StackOver) handle.Unwrap();
stack.Run();
}
}
}
}
相关:
【问题讨论】:
-
不要创建无限递归的循环。
-
我认为没有人可以避免 StackOverflow
-
你能发布一些示例代码吗?特别是具有递归的位。
-
不要写任何代码。
-
你调用Run(),它又调用Run(),然后调用Run(),然后Run()再次调用Run()。毕竟,Run() 被调用了几百次,导致......溢出堆栈!