如何使用LINQ为整数列表中每个元素加1?现有代码失效
嘿,这个问题我碰到过!你之所以用ForEach不行,主要有两个关键原因:
List(Of Integer).ForEach()方法的返回值是空(Void),它只是用来遍历集合执行指定操作,不会返回新集合,所以你没法直接把它赋值给m.Pages。- 而且
Integer是值类型,就算你在ForEach的逻辑里写x +=1,修改的也只是元素的临时副本,原集合里的元素根本不会有变化。
那用LINQ怎么实现需求呢?其实很简单,用Select方法生成新集合就好:
m.Pages = insertedPageList.Select(Function(x) x + 1).ToList()
简单拆解下这个写法:
Select会遍历insertedPageList里的每一个元素,对每个元素执行x + 1的操作,返回一个包含所有新元素的IEnumerable(Of Integer)。- 最后用
ToList()把这个可枚举序列转换成List(Of Integer),这样就能直接赋值给m.Pages了。
这里要注意:这种方式是生成一个全新的集合,不会修改原来的insertedPageList。如果你本来就不需要保留原集合的旧值,这个方法完全符合LINQ“查询而非修改”的设计理念,比For循环更简洁。
要是你确实需要修改原集合里的元素,那还是用你原来的For循环最靠谱——因为值类型的特性,LINQ本身并不适合直接修改原集合的元素,强行用的话反而会绕弯路。
内容的提问来源于stack exchange,提问作者user1753377
相关产品推荐
相关产品推荐

