使用LINQ更新List
从上述内容我们可以看出,问题的出现主要是因为使用了错误的方法(ForEach方法)来更新列表中的对象。ForEach方法并不是LINQ方法,它只是在列表中的每个对象上执行一个操作,并没有返回结果。因此,无法使用ForEach方法来过滤列表中的对象或返回一个新的列表。
为了解决这个问题,我们需要使用LINQ方法来更新列表中的对象。可以使用Select方法来对每个对象进行操作,并返回一个新的列表。在这个例子中,我们需要将SELECTED属性设置为true。但是,由于在原始列表中进行操作会改变原始对象,所以我们需要先克隆对象,使其与原始对象分离。如果对象的类不支持克隆操作,我们需要实现克隆方法(最好实现ICloneable接口)。
为什么需要克隆对象呢?因为如果我们想要得到一个具有更改值的新列表,那么就需要克隆对象。否则,原始列表中的对象也会被更改。
当然,有人可能会认为在原始列表中进行更改是一个优势。但是,在原始代码中,结果是一个新的列表,所以我添加了一些代码来展示如何创建这样的结果。
通过使用LINQ方法来更新列表中的对象,并在需要时克隆对象,我们可以解决(update a List
People.ToList().ForEach(a => a.SELECTED = true); ListPeopleUpdated = People.ToList().Select(a => { Person_ b = a.Clone(); b.SELECTED = true; return b; }).ToList();
希望这篇文章能够帮助你理解如何通过LINQ来更新列表中的对象。
问题的出现原因:在使用List的ForEach方法时,它会直接修改集合本身,并且ForEach方法返回的是void类型。ForEach方法接受一个Action委托作为参数,并对列表中的每个元素执行该委托。
解决方法:使用LINQ的方式来更新List中的对象。可以使用Select方法来创建一个新的集合,其中的元素是根据原始集合中的元素进行更新后的结果。然后,可以通过ToList方法将新的集合转换为List对象。
代码示例:
List
以上代码中,通过Select方法对原始列表中的每个元素进行更新操作,并将更新后的元素添加到新的集合中。最后,通过ToList方法将新的集合转换为List对象。
这样,就可以通过LINQ的方式来更新List中的对象,而不是使用List的ForEach方法直接修改集合本身。
问题的出现的原因是因为List<T>.ForEach
方法没有返回值,因此无法对其运行ToList()
方法。而问题的解决方法是使用简单的for循环来选择所有的项,这样最高效。可以使用以下代码实现:
foreach (var person in People) person.Selected = true
另外,需要注意的是,如果OP想要更新People列表中的所有person,使用普通的foreach
循环更简单和更高效。
某些情况下可以使用以下一行代码来实现更新:
foreach(var p in People) p.SELECTED = true;
根据问题标题,OP想要更新原始列表,并不需要创建一个新的列表。
但是也有人对OP的意图表示不太清楚,对于PeopleUpdated
最终的结果不太明确。
以上是关于如何使用LINQ更新List<Object>
的的问题。