Есть ли другой способ игнорировать ошибку в VB?

Есть ли более короткий способ игнорировать ошибку?

это мой код

Try
     Directory.Delete(FolderName, True)
Catch
End Try

Он просто пытается удалить папку, если она существует. Если он не увидит папку, произойдет ошибка, которую я пытаюсь игнорировать. Он занимает место и затрудняет прокрутку кода.

Я использовал On Error Resume Next, но, похоже, он игнорирует все ошибки в методе, и похоже, что я использую его неправильно.

Было бы полезно, если бы кто-нибудь рассказал более короткий способ попытки удалить каталог, не беспокоясь об исключениях null/directory not found

Спасибо!

Классический способ вернуться от On Error Resume Next — использовать On Error GoTo 0. Я не думаю, что это принесет большую пользу... это экономит только одну строку, и это очень устаревший стиль кодирования. Я бы не ожидал, что у вас будет много реплик, подобных этой, где вы хотите эффективно выстрелить и забыть. Я не думаю, что это плохо, если они выделяются необычностью, потому что они должно быть необычны.

Craig 15.03.2022 14:18

Исключение является исключительным, то есть этого не должно происходить, но Try..Catch предназначен для обработки этих исключительных случаев. Исключения не должны быть встроены в логику, когда это возможно. При этом, если бы все так кодировали, то FileNotFoundException был бы не нужен, но тем не менее он у нас есть.

djv 15.03.2022 16:24
docs.microsoft.com/en-us/dotnet/api/…
dbasnett 16.03.2022 14:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
3
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я бы создал метод и назвал его там, где вы хотите попытаться удалить папку. Таким образом, у вас всегда будет только одна линия.

Sub TryDeleteFolder(folderName As String)
    Try
        Directory.Delete(folderName, True)
    Catch 
    End Try
End Sub

Для меня «Попробовать» означает, что он вернет результат в случае успеха (см., например, TryParse и TryGetValue в .NET Framework). Я использую что-то вроде «выстрелил и забыл», если мне все равно, удастся ли это.

Craig 15.03.2022 20:45
Ответ принят как подходящий

Я всегда кодирую с целью предотвращения ошибок, поэтому я бы написал это как

If Directory.Exists(folderName) Then
   Directory.Delete(folderName, True)
End If

Тем не менее, я призываю вас избавиться от позиции «игнорировать ошибки». Вместо этого используйте обработку исключений с помощью Try/Catch/End Try, так как это, наконец, позволяет вам специально обрабатывать строки кода, подверженные ошибкам, что было кошмаром в старом VB6.

IDE также обеспечивает свертывание кода для блоков Try/Catch/End Try, поэтому, если вы чувствуете, что они занимают слишком много места, сверните их!

Это то, что я ищу! Try Catch — это бельмо на глазу для однострочных кодов, особенно если это тот, который вам нужен. «Я всегда пишу код с целью предотвращения ошибок» Я буду иметь это в виду. Спасибо!

DarkestRaddish 15.03.2022 16:01

Существование каталога не означает автоматически, что его можно удалить (разрешения, блокировки файлов и т. д.). Это все еще может вызвать исключение.

MatSnow 15.03.2022 17:39

Кроме того, существование каталога во время его проверки не гарантирует его дальнейшего существования в то время, когда вы пытаетесь его удалить. В некоторых случаях это может привести к лучшему пользовательскому опыту, чтобы сначала протестировать, но состояние гонки в основном означает, что вам всегда нужно иметь обработку ошибок при файловых операциях.

Craig 15.03.2022 20:43

@dbasnett: Не знаю, почему вы изменили If Directory.Exists(folderName) = True на If Directory.Exists(folderName). Конечно, технически это одно и то же, но я всегда предпочитаю быть явным/"откровенным" в своем коде, чтобы было немного изменений, которые я или кто-то еще может сделать ложным предположением о том, что делает строка кода.

Hel O'Ween 16.03.2022 17:38

@HelO'Ween Единственное, что может появиться между If и Then, - это логическое значение, так какое еще предположение можно сделать?

dbasnett 16.03.2022 20:10

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