Я пишу приложение на C # и наткнулся на что-то, из-за чего я не уверен, что это ошибка Visual Studio или мои знания неверны.
Виновником является оператор using внутри части "catch" команды try / catch, где Visual Studio 2019 показывает предупреждение о том, что одноразовый объект не будет удален:
Одноразовый объект, созданный MakeMeSomeDisposableObject (), никогда не удаляется
Тот же оператор, который используется вне перехвата, не показывает предупреждающего сообщения.
Вот пример того, о чем я говорю:
try
{
SomeMethodThrowingExceptions();
}
catch
{
using(var someDisposableObject = MakeMeSomeDisposableObjects())
{
someDisposableObject.SaveTheWorldFromException();
}
}
Насколько я понимаю, в случае исключения одноразовый объект спасет мир и будет утилизирован после завершения своей работы из-за оператора using. Однако Visual Studio думает иначе и показывает предупреждающее сообщение, но также не показывает никаких исправлений - это ошибка VS, или я ошибаюсь в том, как операторы using работают в уловке?
using
внутри try или за пределами try catch все вместе, то сообщение об ошибке исчезнет? - person Casey Crookston   schedule 13.09.2019try/catch
; сейчас он прячетсяMakeMeSomeDisposableObject
. Что произойдет, если вы объявитеsomeDisposableObject
снаружи, а затем добавитеfinally
блок и избавитесь от него там? - person zaggler   schedule 13.09.2019catch
может фактически выдать ошибку if, что оператор using может дать сбой, поэтому компилятор сообщает вам, что, возможно,MakeMeSomeDisposableObjects
не удаляется внутри этого улова, потому что Оператор using создает собственный try / catch и, следовательно, это всего лишь предупреждение ... TBH, вы не должны этого делать, делайте это внутри try и или объявляйте его снаружи ... - person zaggler   schedule 13.09.2019using var someDisposableObject = MakeMeSomeDisposableObjects; someDisposableObject.SaveTheWorldFromException();
, оно все еще выдает предупреждение? - person zaggler   schedule 13.09.2019