Advertencia del compilador (nivel 2) CS0728

Actualización: noviembre 2007

Mensaje de error

Asignación posiblemente incorrecta a la variable local 'variable', que es el argumento pasado a una instrucción using o lock. La llamada Dispose o el desbloqueo se producirá en el valor original de la variable local.
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.

Hay varios escenarios donde los bloques using o lock producirán una pérdida temporal de recursos. El siguiente es un ejemplo:

thisType f = null;

using (f)

{

f = new thisType();

...

}

En este caso se eliminará el valor original, como por ejemplo null, de la variable thisType cuando el bloque using termine la ejecución, pero no se eliminará el objeto thisType creado dentro del bloque, aunque eventualmente se recogerá como elemento no utilizado.

Para resolver este error, utilice el siguiente formulario.

using (thisType f = new thisType())

{

...

}

En este caso, se eliminará el objeto thisType recién asignado.

Ejemplo

El código siguiente generará la advertencia 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() { }
}