我有一个类对象的列表,我需要使用以这些字母“GHB”开头的元素过滤该列表,然后将listview控件dataconext设置为它以显示元素
if(myList.ToList().FindIndex(x=> x.Name !=null)!=-1 )
{
listview1.DataContext = myList.ToList().where(x=> x.Name.StarstWith("GHB"))
}
但是当元素为空时它会给我一个错误
答案 0 :(得分:3)
它会给你错误,因为你的if条件实际上是无用的。您检查至少一个元素中的Name
是否为空,如果是,则尝试访问该变量。这当然会失败,因为您只需要1个带有效名称的元素,其余的仍然可以有null
个值,这将导致NullReferenceException
您可以做的是:在where子句中另外检查Name
是否为空,如果是,则检查是否StartsWith("GHB")
:
listview1.DataContext = myList.Where(x => x?.Name != null && x.Name.StartsWith("GHB")).ToList();
通过这种方式,您可以节省if条件。
我猜你要检查的是如果所有元素中的Name
不为空。在这种情况下,您可以使用All方法:
if (myList.All(x=>x.Name != null)
编辑:如果列表中的元素完全?
,则使用Name
将避免检查null
:
myList.Where(x => x?.Name != null && x.Name.StartsWith("GHB")).ToList();
答案 1 :(得分:1)
试试这个:
listview1.DataContext = myList
.Where(x => x != null
&& !string.IsNullOrEmpty(x.Name)
&& x.Name.StarstWith("GHB"))
.ToList();
...并删除if
声明。