Точка останова не срабатывает при вызове метода в лямбде - PullRequest
0 голосов
/ 02 августа 2011

Когда я помещаю точку останова в метод, который я вызываю из лямбда-выражения, точка останова никогда не срабатывает. Когда я перемещаю вызов метода за пределы лямбды, достигается точка останова.

Например:

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 Ответ

2 голосов
/ 02 августа 2011

Итак, я понял это.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 () немедленно перечисляет, выполняя инкремент для каждого элемента, и ваша точка останова срабатывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...