我發現StackOverflow上這個例子:Lambda和VB.NET
var people = new List<Person> {
new Person{Name="aaa", Salary=15000, isHip=false}
,new Person{Name="aaa", Salary=15000, isHip=false}
,new Person{Name="bbb", Salary=20000, isHip=false}
,new Person{Name="ccc", Salary=25000, isHip=false}
,new Person{Name="ddd", Salary=30000, isHip=false}
,new Person{Name="eee", Salary=35000, isHip=false}
};
people.Where(p => p.Salary < 25000).Update(p => p.isHip = true);
foreach (var p in people)
{
Console.WriteLine("{0} - {1}", p.Name, p.isHip);
}
public static void Update<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
action(item);
}
在C#中的一切工作正常。 我試圖在VB.NET中進行轉換。 下面的代碼:
<System.Runtime.CompilerServices.Extension()> _
Public Sub Update(Of T)(ByVal source As IEnumerable(Of T), ByVal action As Action(Of T))
For Each item In source
action(item)
Next item
End Sub
如果我嘗試更新我的收藏事情不工作,但:
people.Where(Function(p) p.Salary < 25000).Update(Function(p) p.isHip = true)
我使用VS2008(3.5) 這件事情讓我發瘋了。
有沒有人可以幫助我?
阿爾貝託
謝謝你的幫助。我解釋了我的問題:「如果我嘗試更新我的收藏夾,則不起作用」。無論如何,我已經發現我可以做這樣的事情:.Update(AddressOf UpdateIsHip)UpdateIsHip是我的Function(或Sub),它完全符合我的預期。 – LeftyX 2010-09-28 19:56:33