对象引用未设置为对象的实例 - 但它是?

时间:2012-03-31 04:34:55

标签: asp.net class

我在asp中创建了一个Sudoku Puzzle,但是我遇到了一些类的问题。当我创建一个函数来显示文本框中的所有数字时,我收到此错误:对象引用未设置为对象的实例。我知道这意味着我的对象为null,但这是我的代码。我收到错误的行是:stbNumber.setNumber(currentSolution [3 * i + m,3 * k + n]);

private SudokuTextBox stb;
private Puzzle puzzle;
private Box box;
private Number stbNumber;


public void displayAll(object sender,EventArgs e)
{
    puzzle = new Puzzle();

    for (int i = 0; i < 3; i++)
    {
        for (int k = 0; k < 3; k++)
        {
            box = new Box();
            for (int m = 0; m < 3; m++)
            {
                for (int n = 0; n < 3; n++)
                {
                    stbNumber = new Number();
                    stb = new SudokuTextBox();
                    stbNumber.setNumber(currentSolution[3 * i + m, 3 * k + n]);
                    stb.setTextBoxValue(stbNumber);
                    stb.setVisibility(true);
                    box.setItem(stb, m, n);
                }// end forth for
            }//end third for
            puzzle.setItem(box, i, k);
        }//end second for
    }//end first for
    generateBoxes();
}

我已经在我的代码的最顶层初始化了stbNumber,并确保currentSolution不为null或为空。因此,我不确定我做错了什么。我还应该提一下,我在其他地方有这个确切的代码来生成新的谜题并且它工作正常,但是当我点击一个按钮时,这段代码专门被调用。

1 个答案:

答案 0 :(得分:0)

你基本上有3种可能性:

stbNumber.setNumber(currentSolution[3 * i + m, 3 * k + n]);

  • stbNumber可以为null
  • currentSolution可以为null
  • 您尝试索引的元素可能为null - 只是因为currentSolution不为null并不意味着该索引处的项不是null - 所以新的一个或者采取适当的操作
  • 因为你新建了一个stbNumber的实例,所以它不太可能是罪魁祸首(但它可能是) 你说你正在检查currentSolution为空,我没有看到代码,从你发布的代码中,很可能是这里的罪魁祸首。您可以做的是在访问之前添加一个null检查,如果您的测试无法在某处写错误消息:

        stbNumber = new Number();
        stb = new SudokuTextBox();
        if ( currentSolution != null )
        {
           // if the item does not exist, new it up
           if ( currentSolution[3 * i + m, 3 * k + n] == null ) currentSolution[3 * i + m, 3 * k + n] = new someObject()
           stbNumber.setNumber(currentSolution[3 * i + m, 3 * k + n]);
           stb.setTextBoxValue(stbNumber);
        }
        else
        {
          WriteSomeErrorMessage("currentSolution is null");
        }