对象引用未设置为对象的实例 - 但它是?
我在asp中创建了一个Sudoku拼图,我在某些类中遇到了麻烦。当我创建一个函数来显示文本框中的所有数字时,出现此错误:对象引用未设置为对象的实例。我知道这意味着我的对象是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或空。因此我不确定我做错了什么。我还应该提到,我在其他地方有这个确切的代码来生成新的难题,它的工作原理很好,但是当我单击一个按钮时,这段代码会专门被调用。
你基本上有3种可能性:
stbNumber.setNumber(currentSolution[3 * i + m, 3 * k + n]);
stbNumber
可能是空currentSolution
可能是空因为你新建了一个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");
}
我发现了什么是罪魁祸首。我在我的代码的第一页加载中调用了一个名为puzzle的类(而不是在回发中)。然而,当我点击使用此代码的按钮时,它看起来好像是拼图对象为空。 – 2012-03-31 06:04:06
第一个发布的代码是一个在页面加载时被调用的函数,这是在按下按钮时调用的代码。 – 2012-03-31 06:05:18
box = new Box(); stb = new SudokuTextBox(); 对(INT I = 0; I 2012-03-31 06:06:04
你能后,你确认currentSolution不为空的代码? – tjscience 2012-03-31 04:38:29