Compiler Warning (level 2) CS0728

Possibly incorrect assignment to local 'variable' which is the argument to a using or lock statement. The Dispose call or unlocking will happen on the original value of the local.

There are several scenarios where using or lock blocks will result in a temporary leak of resources. Here is one example:

thisType f = null;

using (f)

{

f = new thisType();

...

}

In this case, the original value, such as null, of the variable thisType will be disposed of when the using block finishes executing, but the thisType object created inside the block will not be, although it will eventually get garbage collected.

To resolve this error, use the following form:

using (thisType f = new thisType())

{

...

}

In this case, the newly allocated thisType object will be disposed of.

Example

The following code will generate warning 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() { }
}