c#StackOverflowException声明锯齿状数组时

时间:2016-04-11 03:00:31

标签: c# multidimensional-array

调试我的c#数组声明时,我得到一个StackOverflowException,如下所示:

public class ConfigClass : MainWindow
{
    private const int totalIndex = 3;
    public int[][][] Config = new int[totalIndex][][]
    {
        new int[1][]
        {
            new int[] {10, 5, 5, 5, 1, 4},
        },
        new int[9][]
        {
            new int[] {4, 3, 1, 4, 2},
            new int[] {4, 8, 6, 7, 5},
            new int[] {2, 2, 4},
            new int[] {2, 2, 4},
            new int[] {0, 2, 2, 2, 2, 2, 2, 2, 2},
            new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0},
            new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0},
            new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0},
            new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0},
        },
        new int[9][]
        {
            new int[] {4, 1, 2, 3, 4},
            new int[] {4, 5, 6, 7, 8},
            new int[] {2, 2, 4},
            new int[] {2, 2, 4},
            new int[] {0, 3, 3, 3, 3, 3, 3, 3, 3},
            new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0},
            new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0},
            new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0},
            new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0},
        },
    };
}

public partial class MainWindow : Window
{
    ConfigClass Core = new ConfigClass();
    public DateTime systemDateTime = new DateTime();

    public static class ReferenceTo
    {
        // for group
        public const int group_A = 0;
        public const int group_B = 1;
        public const int group_C = 2;
        public const int group_D = 3;
    }
    public MainWindow()
    {
        InitializeComponent();
        StartSecondTimer();
    }

    public void UpdateTime()
    {
        label_systemTime.Content = systemDateTime.ToLongTimeString();
        label_systemDate.Content = systemDateTime.ToLongDateString();
    }

    public void StartSecondTimer() // start one second timebase
    {
        DispatcherTimer secondTimer = new DispatcherTimer();
        secondTimer.Tick += new EventHandler(dispatcherSecond_Tick);
        secondTimer.Interval = new TimeSpan(0, 0, 1);
        secondTimer.Start();
    }

    private void dispatcherSecond_Tick(object sender, EventArgs e) // one second timebase event handler
    {
        systemDateTime = DateTime.Now;
        UpdateTime();
    }
}

它说我可能有无限循环或无限递归。我在这里缺少什么?

谢谢! :)

编辑:我添加了'公共类ConfigClass:MainWindow',它是错误的来源。

1 个答案:

答案 0 :(得分:2)

你的无限循环是因为:

ConfigClass Core = new ConfigClass();

MainWindow课程中。

每次创建ConfigClass时,MainWindow构造函数(和字段初始化)也会运行。但是,MainWindow字段初始化包括创建另一个ConfigClass。所以它的构造函数和超类构造函数将会运行。

有点难以理解你正在尝试做什么(它有点怀疑你的MainWindow中有一个子类的引用 - 但上面是你问题的原因。

来自你的评论:

  

我在ConfigClass上继承MainWindow的目的是因为我想使用Reference.To类在数组中查找。

您不需要继承MainWindow来做到这一点。 您的代码的任何部分都可以编写MainWindow.ReferenceTo而不会出现问题