Lambda NULL检查List foreach find方法

时间:2015-08-27 20:37:21

标签: c# lambda

如何在具有ForEach和Find方法的lambda表达式中检查NULL值。

例如我在下面的方法中采用逗号分隔的值列表,迭代它们并为每个值找到一个SelectListItem,如果找到它,则将其标记为Selected。当没有找到匹配的项目并且它抛出空引用异常时会出现问题。

private static void MarkListItemsSelected(string param, IList<SelectListItem> items)
{
    var filters = param.Split(';');
    filters.ToList()
     .ForEach(x => items.ToList()
                   .Find(y => y.Text.ToUpper().Equals(x.ToUpper()))
                   .Selected = true);
}

2 个答案:

答案 0 :(得分:5)

Linq示例:

exit

传统循环:

private static void MarkListItemsSelected(string param, IList<SelectListItem> items)
{
    var filters = param.ToUpper().Split(';');

    items.ToList()
         .ForEach(x => { x.Selected = filters.Contains(x.Text.ToUpper());});
}

答案 1 :(得分:1)

只需向lambda添加空检查:

private static void MarkListItemsSelected(string param, IList<SelectListItem> items)
{
    var filters = param.Split(';');
    filters.ToList().ForEach(
        x =>
        {
            var found = items.ToList().Find(y => y.Text.ToUpper().Equals(x.ToUpper()));
            if (found != null)
                found.Selected = true;
        });
}