使用以特定字母开头的元素过滤类的列表

时间:2017-10-24 14:51:12

标签: c# wpf

我有一个类对象的列表,我需要使用以这些字母“GHB”开头的元素过滤该列表,然后将listview控件dataconext设置为它以显示元素

if(myList.ToList().FindIndex(x=> x.Name !=null)!=-1 )
{
  listview1.DataContext = myList.ToList().where(x=> x.Name.StarstWith("GHB"))
}

但是当元素为空时它会给我一个错误

2 个答案:

答案 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声明。