获取“对象引用未设置为对象的实例”。即使我排除null

时间:2013-01-22 10:25:29

标签: c#

我使用datagridview有以下代码,你只能选择一整行: “Variable.addModArray [i]”是一个字符串[];

class Variables
{
    public static string[] addModArray;
}

int i = 0;
while (i < dgv.SelectedRows.Count)
{
    if (dgv.SelectedRows[0].Cells[i].Value != null)
        Variables.addModArray[i] = dgv.SelectedRows[0].Cells[i].Value.ToString(); //gets error
    i++;
}

当我运行代码时,我得到“对象引用未设置为对象的实例”。错误,但我已告诉计算机如果值不为空则执行代码!我做错了吗?

告诉我是否需要在此问题中添加任何内容。

3 个答案:

答案 0 :(得分:1)

首先,对于a.b.c的任何给定组合,检查a.b.c != null并不意味着a.b不能为空,或a不能为空空。

正如其他评论员指出的那样,它也不会阻止其他变量为空。

其次,不清楚为什么你为每个选定的行增加i但不使用除第一行之外的任何内容。

你说你只能选择一行,那么为什么还要打扰一个循环?

我希望:

int i = 0;
while (i < dgv.SelectedRows.Count)
{
    if (dgv.SelectedRows[0].Cells[i].Value != null)
        Variables.addModArray[i] = dgv.SelectedRows[0].Cells[i].Value.ToString(); //gets error
    i++;
}

是:

int i = 0;
while (i < dgv.SelectedRows.Count)
{
    if (dgv.SelectedRows[i].Cells[0].Value != null)
        Variables.addModArray[i] = dgv.SelectedRows[i].Cells[0].Value.ToString(); //gets error
    i++;
}

可替换地:

int i = 0;
while (i < dgv.SelectedCells.Count)
{
    if (dgv.SelectedRows[0].Cells[i].Value != null)
        Variables.addModArray[i] = dgv.SelectedRows[0].Cells[i].Value.ToString(); //gets error
    i++;
}

答案 1 :(得分:0)

也可能是VariablesaddModArray为空。

答案 2 :(得分:-2)

试试这个

   //please try this
    int i = 0;
    if(dgv.SelectedRows.Count > 0)
    {
        while (i < dgv.Columns.Count)
        {
            Variables.addModArray[i] = dgv.SelectedRows[0].Cells[i].FormattedValue; 
            i++;
        }
    }