我正在尝试使用LINQ向我的网格添加SELECT ALL
功能,但是我收到了编译错误。
List<Person_> PeopleUpdated = People.ToList().ForEach(a => a.SELECTED = true).ToList();
它说
无法隐式转换类型&#39; void&#39;至 &#39; System.Collections.Generic.List&lt; LogoSapHrIntegration.frmXmlUpload.Person_&GT;&#39;
我做错了什么?
答案 0 :(得分:4)
List<T>.ForEach
没有返回值(即无效),因此您无法对此运行ToList()
。 (见MSDN)
ForEach
列表中每个项目的特定操作(就像执行真正的for
循环一样)。
在你的情况下,选择all的简单for循环是最有效的。
foreach (var person in People)
person.Selected = true
答案 1 :(得分:1)
List<T>.ForEach
返回void
(在您的情况下,它会更改您的收藏)。 ForEach
需要Action<T>
并在列表的每个项目上执行该操作。
答案 2 :(得分:0)
ForEeach
方法(不是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();
(如果该类不支持克隆,则需要实现Clone
方法(最好是IClonable
接口)。)
答案 3 :(得分:0)
首先,您可以使用普通的foreach
循环:
foreach (var person in people)
{
person.Selected = true;
}
哪个是最简单,最干净的。
如果你真的想跳到篮球并使用LINQ,你可以使用ConvertAll
:
var list = new List<Person> { new Person(), new Person() };
var convertedPeople = list.ConvertAll(person =>
{
person.Selected = true;
return person;
});