在lambda中调用方法时不会遇到断点

时间:2011-08-02 15:36:40

标签: vb.net visual-studio-2008 debugging .net-3.5

当我在一个方法中放置一个断点时,我从一个lambda表达式调用,断点永远不会被击中。当我将方法调用移到lambda之外时,断点就会命中。

例如:

Function IncrementAll(ByVal items As IEnumerable(Of Integer)) As IEnumerable(Of Integer)
  Return items.Select(Function(i) Increment(i))
End Function

Function Increment(ByVal i As Integer) As Integer
  Return i + 1 'Breakpoint here
End Function

如果我调用IncrementAll,则Increment中的断点不会被击中。有没有办法让VS 2008停在这些断点上?我讨厌将所有LINQ重写为循环只是为了调试。

1 个答案:

答案 0 :(得分:2)

所以,我明白了。 Select返回一个IEnumerable,并且每个项目的Increment实际执行都会延迟,直到您尝试访问IEnumerable中的项目为止。获得预期效果的最快方法是:

Function IncrementAll(ByVal items As IEnumerable(Of Integer)) As IEnumerable(Of Integer)
    Return items.Select(Function(i) Increment(i)).ToList()
End Function

ToList()会立即枚举,从而对每个元素执行Increment,并且您的断点将会触发。