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