Lire en anglais

Partager via


Avertissement du compilateur (niveau 2) CS0728

Assignation potentiellement incorrecte à la 'variable' locale qui est l’argument d’une instruction using ou lock. L’appel Dispose ou le déverrouillage se produira sur la valeur d’origine de la variable locale.

Il existe plusieurs scénarios où les blocs using ou lock provoquent une fuite temporaire de ressources. En voici un exemple :

thisType f = null;

using (f)

{

f = new thisType();

...

}

Dans ce cas, la valeur d’origine (null) de la variable thisType est supprimée à la fin de l’exécution du bloc using , mais l’objet thisType créé dans le bloc ne l’est pas, même s’il fait finalement l’objet d’une récupération de mémoire.

Pour résoudre cette erreur, utilisez la forme suivante .

using (thisType f = new thisType())

{

...

}

Dans ce cas, l’objet thisType nouvellement alloué est supprimé.

Exemple

Le code suivant génère l’erreur 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() { }  
}