如果我要执行以下操作:
If I want to do the following:
List<string> listOfStrings = new List<string>(); listOfStrings.Add("13"); listOfStrings.Add("14"); listOfStrings.Add("FooBar"); listOfStrings.Add("Dummy14Item"); listOfStrings.Add("Brontosaurus165LT"); //... add items here ... // iterate through the list and find all items // ending with "LT" and remove the last two characters // from those items, but leave the list intact for (int i = 0; i < listOfStrings.Count; i++) { if (listOfStrings[i].EndsWith("LT")) listOfStrings[i] = listOfStrings[i].Replace("LT", ""); } // list should now be // // 13 // 14 // FooBar // Dummy14Item // Brontosaurus165 // // can I make this change with LINQ?因此,有一种方法可以对列表t进行投影.除了修改外,基本上包含相同的项目?我试过了
So is there a way to make a projection of the List<t> that contains essentially the same items except for the modification? I tried
listOfStrings.ForEach(x => { if (x.EndsWith("LT")) x = x.Replace("LT", ""); });但是,除非我做错了什么,否则它似乎不起作用.原因之一可能是因为ForEach函数将Action<T>委托作为其参数,该委托通过值而不是通过引用传递T obj. 有人暗示吗?我只是讨厌for(int i;i < list.Count; i++ )的第一个功能块,似乎是schoolschool. Brian
But, unless I am doing something incorrectly, it doesn''t seem to be working. One reason may be because the ForEach function takes as its parameter an Action<T> delegate, which passes T obj by value, not by reference. Does anyone have a hint? I just hate the first block with the for(int i;i < list.Count; i++ ), it seems so gradeschool. Brian
推荐答案int i = 0; listOfStrings.ForEach(x => { if (x.EndsWith("LT")) { listOfStrings[i] = x.Replace("LT", string.Empty); } i++; } );
更多推荐
有没有一种方法可以使用LINQ在适当位置修改列表?
发布评论