2013-07-18 44 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);