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;
}
即使在tab-index 5处有一个控件,Get Control也会获得一个空值。
答案 0 :(得分: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
)似乎更合适。