Share via


Avviso del compilatore (livello 2) CS0728

Aggiornamento: novembre 2007

Messaggio di errore

Probabile assegnazione non corretta a 'variabile' locale, che rappresenta l'argomento di un'istruzione using o lock. La chiamata Dispose o lo sblocco avverrà sul valore originale dell'argomento locale.
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.

Esistono diversi scenari in cui i blocchi using o lock generano una perdita temporanea di risorse, ad esempio:

thisType f = null;

using (f)

{

f = new thisType();

...

}

In questo esempio, al termine dell'esecuzione del blocco using il valore originale, ovvero null, della variabile thisType verrà eliminato ma non l'oggetto thisType creato all'interno del blocco, che alla fine verrà sottoposto alla procedura di Garbage Collection.

Per correggere l'errore, utilizzare il seguente formato:

using (thisType f = new thisType())

{

...

}

In questo caso, il nuovo oggetto thisType allocato verrà eliminato.

Esempio

Il seguente codice di esempio genera l'avviso 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() { }
}