当我在一个方法中放置一个断点时,我从一个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重写为循环只是为了调试。
答案 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,并且您的断点将会触发。