2013-07-18 36 views
2

如何使用Lambda表达式来执行此操作?Lambda表达式来迭代通过集合并编辑C#

foreach (var l in urllist) 

{ 
    l.Url = l.Url + "?id=" + client.id+ "&active=" + client.Active; 
} 
+1

'1.Url ='????? –

+0

你确定,它是'1.Url' – Tilak

+0

哦,也许这应该是'l.Url',它本质上是一个'+ ='操作。 –

回答

4

不要使用LINQ修改集合,使用循环代替:

所以这是最好的方法(有看UriBuilder Class):

foreach (var l in urllist) 
{ 
    l.Url = string.Format("{0}?id={1}&active={2}", l.Url, client.id, client.Active); 
} 

你必须创建一个新的集合,否则什么是效率低于修改原始集合:

urllist = urllist 
    .Select(l => {l.Url = string.Format("{0}?id={1}&active={2}", l.Url, client.id, client.Active; return l;}) 
    .ToList(); 

如果urllistList<T>,你也可以使用,LINQ预.NET 2方法ForEach

urllist.ForEach(l => l.Url = string.Format("{0}?id={1}&active={2}", l.Url, client.id, client.Active)); 
+0

注意,'.ToList'实际上会返回'List ',你必须做'.Select(l => {l.Url = ...; return l})。ToList )' –

+0

@pswg:呃,纠正。谢谢。但是,你真的不应该使用这种方法。所以我只是想防止它;) –

+0

感谢您的所有答案。我坚持使用传统的foreach循环。 – Gokul

2

如果它是一个List<T>可以使用ForEach方法:

urlList.ForEach(x => x.Url += "?id=" + client.id+ "&active=" + client.Active); 

否则,这将工作,虽然它依赖于Count的评价的副作用,并且我不会推荐它用于生产代码:

urlList.Select(x => x.Url += "?id=" + client.id+ "&active=" + client.Active) 
     .Count(); 

个人而言,我会坚持使用传统的foreach循环。

0

这是你在找什么?

urllist.ForEach(l => 1.Url = l.Url + "?id=" + client.id+ "&active=" + client.Active);