Я создал тестовое приложение, чтобы проверить ответ @CamilioTerevinto.
Простое приложение winforms с методом:
public bool TestMethod(out Image bmp)
{
Thread.Sleep(3000);
bmp = Bitmap.FromFile(@"C:\Users\UKS\Desktop\2000x2000pixels.bmp");
Thread.Sleep(1000);
return true;
}
Давайте попробуем код:
public Form1()
{
InitializeComponent();
Image img;
var a = TestMethod(out img);
img.Dispose();
}
Мы видим ожидаемое поведение - изображение было удалено, а память свободна.
Давайте попробуем следующий код:
public Form1()
{
InitializeComponent();
var a = TestMethod(out _);
}
Как мы видим, изображение не было уничтожено.Память не была свободной.
Таким образом, Discard не вызывает Dispose ();Метод.
Давайте попробуем еще несколько тестов:
Конструкция:
var a = TestMethod(out _.Dispose());
Не будет работать.Это говорит о том, что _ не существует в текущем контексте.
Consttruction:
var a = TestMethod(out _);
_.Dispose();
Будет делать тот же результат.
Итак ....
Discards некорректно работает с аргументом IDisposable out.Вам нужно явно позвонить .Dispose()
.