如何消除LinQ查询中的nullReference异常?

如何消除LinQ查询中的nullReference异常?,linq,Linq,gridview_new是一个表单类 private checkNulls[] CheckNulls() { checkNulls Cntrl; checkNulls[] cntrlsToupdate = new checkNulls[15]; using (gridview_new IterateThroughCntrls = new gridview_new()) {

gridview_new是一个表单类

private checkNulls[] CheckNulls()
    {
        checkNulls Cntrl;
        checkNulls[] cntrlsToupdate = new checkNulls[15];
        using (gridview_new IterateThroughCntrls = new gridview_new())
        {              

            for (int i = 5; i < 18; i++)
            {
                var getCntrl = 
                    IterateThroughCntrls.Controls.Cast<Control>().Where(x => x.TabIndex ==  i).SingleOrDefault();

                if (!(getCntrl.Text == ""))
                {
                    Cntrl = (checkNulls)(i);
                    cntrlsToupdate[i - 5] = Cntrl;
                }
            }
        }

        return cntrlsToupdate;
    }
private checkNulls[]checkNulls()
{
checkNulls Cntrl;
checkNulls[]cntrlsToupdate=新的checkNulls[15];
使用(gridview\u new IterateThrowCntrls=new gridview\u new())
{              
对于(int i=5;i<18;i++)
{
变量getCntrl=
IterateThrowCntrls.Controls.Cast()。其中(x=>x.TabIndex==i)。SingleOrDefault();
如果(!(getCntrl.Text==“”)
{
Cntrl=(检查空)(i);
cntrlsToupdate[i-5]=Cntrl;
}
}
}
返回cntrlsToupdate;
}

Get Control即使在选项卡索引5处有一个控件,也会得到一个null值。

首先,
…OrDefault
返回给定类型的默认值,如果是引用类型(如
Control
),则会得到
null
。因此,您可以简单地检查:

if(getCntrl != null)
{
    // safe....
}
如果要将控件的文本和
作为默认值,如果
中的
未找到匹配控件,请使用
选择
+
默认值ifempty

string getCntrlText = IterateThroughCntrls.Controls.Cast<Control>()
    .Where(x => x.TabIndex ==  i)
    .Select(ctrl => ctrl.Text)
    .DefaultIfEmpty("")
    .Single();
string getcntrtext=iteratethrowcntrls.Controls.Cast()
.其中(x=>x.TabIndex==i)
.Select(ctrl=>ctrl.Text)
.DefaultIfEmpty(“”)
.Single();
请注意,我使用了
Single
,因为我提供了一个默认值


请注意,如果多个项与谓词匹配,
Single…
将引发异常(与
First…
相反)。通常,它与键属性一起使用,在这些属性中不可能找到多个元素。因此,
First
(或
First或default
)在这里似乎更合适。

首先要解决的是您的命名问题-您的类型和变量名使此代码目前很难阅读。您还需要告诉我们
int
checkNulls
之间的转换是什么-可能这是一个自定义转换,但您没有告诉我们任何有关它的信息。是否也有TabIndex==6、7、…、17的控件?