如何在具有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);
}
答案 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;
});
}