Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Lambda NULL签入列表foreach find方法_C#_Lambda - Fatal编程技术网

C# Lambda NULL签入列表foreach find方法

C# Lambda NULL签入列表foreach find方法,c#,lambda,C#,Lambda,如何检查具有ForEach和Find方法的lambda表达式中的NULL值 例如,我有一个下面的方法,它接受一个逗号分隔的值列表,对它们进行迭代,并为每个值找到一个SelectListItem,如果找到,则将其标记为Selected。当找不到匹配项并且抛出空引用异常时,就会出现问题 private static void MarkListItemsSelected(string param, IList<SelectListItem> items) { var filters

如何检查具有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);
}
private static void markListItems已选中(字符串参数,IList项)
{
变量过滤器=参数拆分(“;”);
filters.ToList()
.ForEach(x=>items.ToList()
.Find(y=>y.Text.ToUpper().Equals(x.ToUpper()))
.Selected=true);
}
Linq示例:

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());});
}
private static void markListItems已选中(字符串参数,IList项)
{
var filters=param.ToUpper().Split(“;”);
项目.收费表()
.ForEach(x=>{x.Selected=filters.Contains(x.Text.ToUpper());});
}
传统循环:

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

    foreach( var x in items ) {
        x.Selected = filters.Contains(x.Text.ToUpper());
    }
}
private static void markListItems已选中(字符串参数,IList项)
{
var filters=param.ToUpper().Split(“;”);
foreach(项目中的var x){
x、 Selected=filters.Contains(x.Text.ToUpper());
}
}
Linq示例:

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());});
}
private static void markListItems已选中(字符串参数,IList项)
{
var filters=param.ToUpper().Split(“;”);
项目.收费表()
.ForEach(x=>{x.Selected=filters.Contains(x.Text.ToUpper());});
}
传统循环:

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

    foreach( var x in items ) {
        x.Selected = filters.Contains(x.Text.ToUpper());
    }
}
private static void markListItems已选中(字符串参数,IList项)
{
var filters=param.ToUpper().Split(“;”);
foreach(项目中的var x){
x、 Selected=filters.Contains(x.Text.ToUpper());
}
}

只需在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;
        });
}
private static void markListItems已选中(字符串参数,IList项)
{
变量过滤器=参数拆分(“;”);
filters.ToList().ForEach(
x=>
{
var found=items.ToList().Find(y=>y.Text.ToUpper().Equals(x.ToUpper());
如果(找到!=null)
found.Selected=true;
});
}

只需在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;
        });
}
private static void markListItems已选中(字符串参数,IList项)
{
变量过滤器=参数拆分(“;”);
filters.ToList().ForEach(
x=>
{
var found=items.ToList().Find(y=>y.Text.ToUpper().Equals(x.ToUpper());
如果(找到!=null)
found.Selected=true;
});
}

你不需要
ToList()
,它会被分割成一个
数组
。@Greg数组没有
ForEach
方法。@juharr没有,但它相当于
ForEach
那么,如果你可以只做
ForEach
.items.ToList(),为什么要为
ForEach
创建一个
列表呢是毫无根据的。@Greg我完全同意,认为
ForEach
是一个令人憎恶的东西,但是你的评论听起来好像他们可以删除
ToList
。你不需要
ToList()
,它会分解成一个
Array
。@Greg Array没有
ForEach
方法。@juharr他们没有,但是它相当于
foreach
那么,既然你可以做
foreach
,为什么还要为
foreach
创建一个
列表呢?items.ToList()绝对是没有根据的。@Greg我完全同意,并且认为
foreach
是一个令人憎恶的东西,但是你的评论听起来好像他们可以删除
ToList
。我认为
ToList()
中的
部分在这里翻转。编辑:也就是说,应该是
items.Where(…).ToList().ForEach(…)更好的是,只需使用
foreach
即可,无需使用
ToList
。啊,Linq中的副作用,请不要。我认为编辑使用
。所有这些都是一个倒退。使用
ToList().ForEach
ForEach
循环,但不要使用
.All
;这将滥用LINQ的查询性质,引入副作用。另外,这是一种奇怪的、罕见的代码。另外,它取决于正在更改的属性(
.Selected
)恰好是一个布尔值版本的行为稍有不同,因为如果
SelectedListItem
与筛选器不匹配,则原始代码不会更改其当前值。也就是说,如果它最初是
true
,但它不匹配,它将保持
true
。此新代码将其设置为
false
。(也就是说,这实际上对OP来说可能是件好事,但我认为无论如何都应该注意。)编辑:事实上,它甚至更糟:它可以匹配早期的过滤器,然后被不匹配的过滤器设置为
false
。我想它是窃听的。我想<代码> toSist[()/代码>和<代码>这里,部分在这里翻转。编辑:也就是说,应该是
items.Where(…).ToList().ForEach(…)更好的是,只需使用
foreach
即可,无需使用
ToList
。啊,Linq中的副作用,请不要。我认为编辑使用
。所有这些都是一个倒退。使用
ToList().ForEach
ForEach
循环,但不要使用
.All
;这将滥用LINQ的查询性质,引入副作用。另外,这是一种奇怪的、罕见的代码。另外,它取决于正在更改的属性(
.Selected
)恰好是一个布尔值版本的行为稍有不同,因为如果
SelectedListItem
与筛选器不匹配,则原始代码不会更改其当前值。也就是说,如果它最初是
true
,但它不匹配,它将保持
true
。此新代码将其设置为
false
。(也就是说,这对OP来说可能是件好事,但我认为无论如何都应该注意。)编辑:事实上,这是夏娃