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

C# 获取“对象引用未设置为对象的实例”。即使排除null,c#,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.addMo

我使用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++;
}
当我运行代码时,我得到的对象引用没有设置为对象的实例。错误,但我已经告诉计算机,如果值不为空,请执行代码!我做错什么了吗


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

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

正如其他评论员所指出的,它也不能阻止其他变量为空

其次,不清楚为什么要为每个选定行增加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++;
}
试试这个

   //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++;
        }
    }

也可能是变量或addModArray为空。

哪一行给出了错误?dgv.SelectedRows是否为空?此外,您正在迭代SelectedRows的计数,但使用单元格上的索引,这一行会显示此错误?如果dvg.SelectedRows[0]。单元格为空会怎么样?如果dvg.SelectedRows[0].Cells[i]为空会怎样?为什么总是使用dgv.SelectedRows[0]而不是dgv.SelectedRows[i]?@ta.speot.is或Variables为null。或者addModArray是null@Jehof你能回答我的问题吗?因为你解决了我的问题,或者我