0

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

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

4

1 回答 1

2

首先,...OrDefault返回给定类型的默认值,以防引用类型(如Control)您得到null。那么你可以简单地检查一下:

if(getCntrl != null)
{
    // safe....
}

如果您想要控件的文本,并且""默认情况下如果Where没有找到匹配的控件,请使用Select+ DefaultIfEmpty

string getCntrlText = IterateThroughCntrls.Controls.Cast<Control>()
    .Where(x => x.TabIndex ==  i)
    .Select(ctrl => ctrl.Text)
    .DefaultIfEmpty("")
    .Single();

请注意,我已经使用了,Single因为我提供了默认值。

请注意,如果多个项目与谓词匹配,则会Single...引发异常(而不是)。First...通常它与应该不可能找到多个元素的关键属性一起使用。所以First(或FirstOrDefault)在这里似乎更合适。

于 2013-10-30T10:06:10.400 回答