C# 使用LINQ更新列表

C# 使用LINQ更新列表,c#,linq,C#,Linq,我试图使用LINQ向我的网格中添加一个全选功能,但是我得到了一个编译错误 List<Person_> PeopleUpdated = People.ToList().ForEach(a => a.SELECTED = true).ToList(); 上面说 无法将类型“void”隐式转换为 'System.Collections.Generic.List< LogoSapHrIntegration.frmXmlUpload.Person\u>' 我做错了什么?List.For

我试图使用LINQ向我的网格中添加一个全选功能,但是我得到了一个编译错误

List<Person_> PeopleUpdated = People.ToList().ForEach(a => a.SELECTED = true).ToList();
上面说

无法将类型“void”隐式转换为 'System.Collections.Generic.List< LogoSapHrIntegration.frmXmlUpload.Person\u>'

我做错了什么?

List.ForEach返回void在您的情况下,它会更改您的收藏。ForEach会对列表中的每个项目执行一个操作

请参见

列表。ForEach返回void在您的情况下,它会更改您的收藏。ForEach会对列表中的每个项目执行一个操作

请参见

List.ForEach没有返回值ie void,因此无法针对该值运行ToList。看

ForEach为列表中的每个项目指定一个特定的操作,就像执行一个真正的for循环一样

在您的例子中,一个简单的for循环选择all是最有效的

foreach (var person in People)
    person.Selected = true
ForEach没有返回值ie void,因此不能针对该值运行ToList。看

ForEach为列表中的每个项目指定一个特定的操作,就像执行一个真正的for循环一样

在您的例子中,一个简单的for循环选择all是最有效的

foreach (var person in People)
    person.Selected = true
非LINQ的ForEach方法对列表中的每个项运行操作,它不用于从列表中筛选出项,因此不会返回结果

只需在每个项目上运行该方法;没有要分配的结果:

People.ToList().ForEach(a => a.SELECTED = true);
如果需要更改属性的项目的新列表,则需要克隆这些项目,使其与原始项目分离:

List<Person_> PeopleUpdated = People.ToList().Select(a => {
  Person_ b = a.Clone();
  b.SELECTED = true;
  return b;
}).ToList();
如果类不支持克隆,则需要实现克隆方法,最好是IClonable接口。

foreach方法(非LINQ)对列表中的每个项目运行操作,它不用于从列表中筛选项目,因此不会返回结果

只需在每个项目上运行该方法;没有要分配的结果:

People.ToList().ForEach(a => a.SELECTED = true);
如果需要更改属性的项目的新列表,则需要克隆这些项目,使其与原始项目分离:

List<Person_> PeopleUpdated = People.ToList().Select(a => {
  Person_ b = a.Clone();
  b.SELECTED = true;
  return b;
}).ToList();

如果类不支持克隆,则需要实现克隆方法,最好是IClonable接口。

首先,可以使用普通的foreach循环:

这是最简单最干净的

如果您真的想跳转到篮球场并使用LINQ,您可以使用ConvertAll:


首先,您可以使用普通的foreach循环:

这是最简单最干净的

如果您真的想跳转到篮球场并使用LINQ,您可以使用ConvertAll:


怎么了:foreachvar p in People p.SELECTED=true;?人员是IEnumerable?您是想更改每个人的选定字段/属性,还是只是想筛选选定的人员。如果是后者,则为just.where=>a.selectedPeopleUpdate应该包含哪些内容?-所有选定人员的列表,或更新为选定的人员(即尚未选定的人员)的列表。或者这只是一个错误?foreachvar p in People p.SELECTED=true;有什么问题;?人员是IEnumerable?您是想更改每个人的选定字段/属性,还是只是想筛选选定的人员。如果是后者,则为just.where=>a.selectedPeopleUpdate应该包含哪些内容?-所有选定人员的列表,或更新为选定的人员(即尚未选定的人员)的列表。或者这仅仅是一个错误?不知道是谁否决了它也不知道是谁否决了它如果OP想更新所有人,那么简单的foreach循环会更简单、更有效。@TimSchmelter:同意-尽管这其中的一点很糟糕,但同时也会导致人员更新列表。我想OP希望这是一行,但我不确定它是否可以。这不是一行吗:foreachvar p in People p.SELECTED=true;?根据标题OP想更新原始列表,不需要创建新列表。伙计们,问题是他想要什么还不完全清楚do@Leo为什么不清楚?我很清楚。OP正在迭代集合以将Selected设置为true。需要注意的是,如果OP希望更新People中的所有人员,则普通的foreach循环会更简单、更有效。@TimSchmelter:同意-尽管这其中的一些麻烦会同时以PeopleUpdated列表结束。我想OP希望这是一行,但我不确定它是否可以。这不是一行吗:foreachvar p in People p.SELECTED=true;?根据标题OP想更新原始列表,不需要创建新列表。伙计们,问题是他想要什么还不完全清楚do@Leo为什么不清楚?我很清楚。OP正在迭代集合以将Selected设置为true。我认为他没有试图修改列表…我正在尝试向我的grid@Leo如果您想添加“全选”功能,您不想设置所有选定的属性吗
真的吗?我不认为他在试图修改列表…我在尝试向我的列表中添加“全选”功能grid@Leo那么,如果您想添加“全选”功能,您不想将所有选定属性设置为true吗?为什么需要克隆这些项?@Magnus:如果您想要一个具有更改值的新列表,您需要这样做。否则,原始列表中的项目也会被更改。我想这就是重点。@Magnus:也许,也许不是。在原始代码中有一个新列表作为结果,我添加了代码来显示创建这样一个结果需要什么。为什么需要克隆这些项目?@Magnus:如果您想要一个具有更改值的新列表,您需要这样做。否则,原始列表中的项目也会被更改。我想这就是重点。@Magnus:也许,也许不是。在原始代码中有一个新的列表作为结果,我添加了代码来显示创建这样一个结果需要什么。