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

Asp.net 对象引用未设置为对象的实例-但它是?,asp.net,class,Asp.net,Class,我正在用asp创建一个数独游戏,我在一些课程上遇到了问题。当我创建一个函数来显示文本框中的所有数字时,会出现以下错误:对象引用未设置为对象的实例。我知道这意味着我的对象为空,但这是我的代码。我得到错误的那一行是:stbNumber.setNumber(currentSolution[3*I+m,3*k+n]) 私人SudokuTextBox机顶盒; 私人谜题; 私人信箱; 专用号码stbNumber; public void displayAll(对象发送方,事件参数e) { 拼图=新拼图();

我正在用asp创建一个数独游戏,我在一些课程上遇到了问题。当我创建一个函数来显示文本框中的所有数字时,会出现以下错误:对象引用未设置为对象的实例。我知道这意味着我的对象为空,但这是我的代码。我得到错误的那一行是:stbNumber.setNumber(currentSolution[3*I+m,3*k+n])

私人SudokuTextBox机顶盒;
私人谜题;
私人信箱;
专用号码stbNumber;
public void displayAll(对象发送方,事件参数e)
{
拼图=新拼图();
对于(int i=0;i<3;i++)
{
对于(int k=0;k<3;k++)
{
box=新box();
对于(int m=0;m<3;m++)
{
对于(int n=0;n<3;n++)
{
stbNumber=新编号();
stb=新的SudokuTextBox();
stbNumber.setNumber(当前解决方案[3*i+m,3*k+n]);
stb.setTextBoxValue(stbNumber);
机顶盒设置可见性(真);
框。设置项(stb,m,n);
}//结束
}//第三名结束
拼图。设置项(框,i,k);
}//第二个结束
}//先结束
生成框();
}

我在代码的最顶端初始化了stbNumber,并确保currentSolution不为null或空。因此,我不确定我做错了什么。我还应该提到,我在其他地方有生成新谜题的精确代码,它工作得很好,但当我单击按钮时,这部分代码会被特别调用。

您基本上有3种可能性:

stbNumber.setNumber(currentSolution[3 * i + m, 3 * k + n]);
  • stbNumber
    可以为空
  • currentSolution
    可能为空
  • 您试图索引的元素可能为null——仅仅因为currentSolution不为null并不意味着该项在该索引处不为null——所以请启动新元素或采取适当的操作
  • 由于您新创建了一个stbNumber的实例,它不太可能是罪魁祸首(但可能是) 你说你正在检查currentSolution是否为null,我没有看到这方面的代码,从你发布的代码来看,它很可能是罪魁祸首。您可以做的是在访问null之前添加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");
        }
    

    你能在确保currentSolution不为null的地方发布代码吗?我找到了罪魁祸首。我在代码的第一页加载中调用了一个名为puzzle的类(不是在后面的帖子中)。但是,当我单击使用此代码的按钮时,它会使谜题对象看起来像是空的。发布的第一个代码是一个在页面加载时调用的函数,这是在按下按钮时调用的代码。{box=new box();stb=new SudokuTextBox();for(int I=0;I<3;I++){for(int k=0;k<3;k++){box=puzzle.getItem(i,k);for(int m=0;m<3;m++){for(int n=0;n<3;n++){stb=box.getItem(m,n);stb.setVisibility(true)}//end forth for}//end third for}//end second for}//end first for}
        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");
        }