Предупреждение: это унаследованный унаследованный код, который был изначально составлен в первые годы существования VB (не .net, обратите внимание). Я уже имел дело со всевозможными странностями и злом, эта проблема еще более странная.
У меня есть класс, который наследует от IEnumrable, свойство Count которого сообщает 0 (ноль) элементов, но цикл For Each входит в тело цикла и пытается использовать переменную, в которой он должен просто двигаться. Мой код:
On Error Resume Next
Dim d As Foo
For Each d In fooCollection
' use d and throws an exception
Next d
Странно, но каждый раз, когда к d обращаются, в окне вывода выдается исключение:
Первое исключение типа
'System.NullReferenceException'
но я не останавливаюсь на исключении (не в блоке try / catch).
Причиной этой странности является "При ошибке продолжить дальше"?
Найдены странности:
Согласно комментариям Роуленда и Джона, я проверил класс Foo:
Метод GetEnumerator внутри Foo фактически ничего не возвращал! У него было пустое тело. Это в сочетании с On Error Resume Next до того, как цикл вызвал хаос! Вау, это было некрасиво. Спасибо за подсказки, ребята!