Прочитать на английском

Поделиться через


Предупреждение компилятора (уровень 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.

C#
// 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() { }  
}