2013-04-05 96 views
1

我相当肯定这可以重写为Lambda表达式,但每次尝试都会失败。我知道,C#Lambda读取更清晰,但我坚持使用VB.NET。这里是代码 - 有人能指引我朝着正确的方向吗?谢谢!VB.NET Lambda表达式代替迭代器

Events.Where(Function(e) e.TypeID = 1 AndAlso ("," & e.Values).Contains("," & b.ChoiceID & ",")) _ 
     .ToList() _ 
     .ForEach(Sub(e) Notify(cacheValues, e, "Event notification (button press)", "Button pressed: " & b.Text & " on screen: " & b.GroupBox.Text & Environment.NewLine & _ 
       "User: " & cacheValues.CurrentUserName & Environment.NewLine & _ 
       "Pressed at: " & Date.Now.ToShortDateString & " " & Date.Now.ToShortTimeString)) 

老实说,虽然,我通常喜欢只用它来过滤下来的结果,或建立一个集合:如果你想整个事情转化为拉姆达

For Each e As EventToMonitor In Events 
    If e.TypeID = 1 Then 
     If ("," & e.Values).Contains("," & b.ChoiceID & ",") Then 
      Notify(cacheValues, e, "Event notification (button press)", "Button pressed: " & b.Text & " on screen: " & b.GroupBox.Text & Environment.NewLine & 
         "User: " & cacheValues.CurrentUserName & Environment.NewLine & _ 
         "Pressed at: " & Date.Now.ToShortDateString & " " & Date.Now.ToShortTimeString) 
     End If 
    End If 
Next 
+0

这是一个键盘记录? – APrough 2013-04-05 15:55:58

+0

在这种情况下,你想要* lambda *为什么?目前的代码很好。也就是说,我会使用LINQ表达式来过滤(而不是'If')和变换(而不是'Notify'调用中的串联),然后迭代结果,调用'Notify(cacheValues,value) '对于每一个,其中'value'是迭代变量。 – 2013-04-05 16:02:45

回答

1

像这样的东西应该工作:

Dim eventsList = Events.Where(Function(e) e.TypeID = 1 AndAlso ("," & e.Values).Contains("," & b.ChoiceID & ",")) 

For Each e As EventToMonitor In eventsList 
    Notify(cacheValues, e, "Event notification (button press)", "Button pressed: " & b.Text & " on screen: " & b.GroupBox.Text & Environment.NewLine & 
       "User: " & cacheValues.CurrentUserName & Environment.NewLine & _ 
       "Pressed at: " & Date.Now.ToShortDateString & " " & Date.Now.ToShortTimeString) 
Next 
+0

同意,后面的例子是我也会去的路线。这样更清楚。 – 2013-04-05 16:13:28