VB.NET молча не может скомпилировать код с помощью `On Error Resume Next` + захват замыканий

Следующее консольное приложение VB.NET не скомпилируется, а VS2022 не отображает никаких ошибок/предупреждений:

Module Program
    Sub Main()
        On Error Resume Next                    '0
        Dim a As String
        Dim b = Sub(_a) Console.WriteLine(_a)   '1
        Dim c = Sub(_a) a = _a                  '2
    End Sub
End Module

Закомментирование строки '0 заставляет программу работать, как и закомментирование '2.

'0 и '1 могут работать вместе, а '0 и '2 — нет.


P.S. Не надо мне говорить, что On Error Resume Next не рекомендуется — я бы не хотел его использовать. Фактически, я лично предпочитаю C# VB.NET.

Я просто экспериментирую с VB, чтобы проиллюстрировать идею о том, что обработка ошибок в стиле Golang с помощью проверок if err != nil читается так же, как устаревший стиль If Err.GetException() IsNot Nothing Then в VB, с активным On Error Resume Next.

Проверьте настройку «Инструменты => Параметры... => Проекты и решения => Сборка и запуск => Подробность выходных данных сборки проекта MSBuild».

user246821 10.06.2024 17:17

@user246821 user246821 На самом деле ошибка компилятора отображается в окне вывода. Он просто не отображается в списке ошибок.

Sunshine Li 11.06.2024 07:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я просто скопировал ваш код, собрал проект и получил это в окне вывода:

ошибка BC36595: метод не может содержать одновременно оператор «При ошибке возобновить следующий» и определение переменной, которая используется в лямбда-выражении или выражении запроса.

Я недостаточно хорошо знаю внутреннюю работу лямбда-выражений, чтобы точно знать, почему это может быть проблемой, но сообщение об ошибке довольно ясно.

Я думаю, что это может быть ошибка VS2022, которая не отображает это сообщение об ошибке.

Sunshine Li 10.06.2024 13:36

@SunshineLi, его может не быть в списке ошибок, потому что они не смогут указать один номер строки. В вашем случае есть три строки, которые создают ошибку в сочетании, и их может быть больше с дополнительными переменными и/или лямбда-выражениями. Вы не видите его в окне вывода или просто не видите в списке ошибок? Я использую VS 2022 v17.10.1.

jmcilhinney 10.06.2024 13:55

Ах, я понимаю, он просто не отображается в списке ошибок, но список ошибок привлекал внимание, и я думал, что в нем отображается каждая ошибка… Приятно осознавать, что это может быть не так.

Sunshine Li 10.06.2024 15:47

Другие вопросы по теме