C#中的stackoverflowexception解决方案

时间:2013-12-31 05:18:23

标签: c# stack-overflow

如何防止此异常发生,因为我必须从一个类获取某些值并将其传递给另一个类,因为它的对象已经在该类中?

我的第一堂课是:

     public partial class Rack : UserControl
     {
        ContainerAdmin a = new ContainerAdmin();
        public Rack()
        {
           InitializeComponent();
        }

       public string getposition()
       {
        PositionLabel.Text = Regex.Replace(PositionLabel.Text, "[^0-9]+", string.Empty);
        return PositionLabel.Text;
       }
    }

我的另一堂课是:

     public partial class ContainerAdmin : UserControl, IDataConsumer<ContainerAdminAssemblyAdapter>
    {
       public ContainerAdminAssemblyAdapter Adapter { get; set; }

       Rack[] racking = new Rack[64];
    }

将发生递归循环,因此我想阻止这种情况。

2 个答案:

答案 0 :(得分:4)

您可能会创建一个ContainerAdmin创建一个Racks数组,然后创建一个ContainerAdmin,然后创建一个Racks数组,依此类推。它就像一个函数在没有停止条件的情况下调用自身,这就是为什么你得到堆栈溢出。

要解决此问题,您必须重新构建程序。在ContainerAdmin或Rack类中,您不应该创建另一个的新实例。使用我的通灵能力,我猜想应该为Rack对象提供一个预先存在的ContainerAdmin对象。

答案 1 :(得分:0)

你在这里循环。换句话说,你在这里创建了循环依赖。这就是你得到这个例外的原因。

  

Rack正在创建ContainerAdmin的实例,而ContainerAdmin正在创建   创建Rack的实例。