Предупреждение компилятора (уровень 2) CS0728
Возможно, используется недопустимое назначение для локальной переменной "переменная", которая является аргументом оператора using или lock. В исходном значении локального объекта произойдет вызов Dispose или разблокирование.
Существует несколько сценариев, где блоки using
или lock
приведут к временной утечке ресурсов. Ниже приведен один пример.
thisType f = null;
using (f)
{
f = new thisType();
...
}
В этом случае исходное значение, например null, переменной thisType
будет удалено, когда блок using
закончит выполнение, но объект thisType
, созданный в этом блоке, не будет удален, несмотря на то, что он будет в конечном итоге удален сборщиком мусора.
Чтоб устранить эту ошибку, используйте следующую форму:
using (thisType f = new thisType())
{
...
}
В данном случае вновь выделенный объект thisType
будет удален.
Следующий код приводит к возникновению предупреждения CS0728.
// CS0728.cs
using System;
public class ValidBase : IDisposable
{
public void Dispose() { }
}
public class Logger
{
public static void dummy()
{
ValidBase vb = null;
using (vb)
{
vb = null; // CS0728
}
vb = null;
}
public static void Main() { }
}
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: