Číst v angličtině

Sdílet prostřednictvím


Upozornění kompilátoru (úroveň 2) CS0728

Pravděpodobně nesprávné přiřazení k místní proměnné, což je argument příkazu using nebo lock. Volání Dispose nebo odemknutí proběhne na původní hodnotě místního prostředí.

Existuje několik scénářů, kdy using nebo lock bloky způsobí dočasný únik prostředků. Tady je jeden příklad:

thisType f = null;

using (f)

{

f = new thisType();

...

}

V tomto případě bude původní hodnota proměnné, například null, thisType uvolněna při using dokončení provádění bloku, ale thisType objekt vytvořený uvnitř bloku nebude, i když nakonec získá uvolňování paměti.

Pokud chcete tuto chybu vyřešit, použijte následující formulář:

using (thisType f = new thisType())

{

...

}

V tomto případě bude nově přidělený thisType objekt odstraněn.

Příklad

Následující kód vygeneruje upozornění 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() { }  
}