Ler em inglês

Compartilhar via


Aviso do compilador (nível 2) CS0728

Atribuição possivelmente incorreta a 'variable' local que é o argumento para uma instrução using ou lock. A chamada Dispose ou o desbloqueio ocorrerá no valor original do local.

Há vários cenários em que o bloco using ou lock resultará em vazamento temporário de recursos. Aqui está um exemplo:

thisType f = null;

using (f)

{

f = new thisType();

...

}

Nesse caso, o valor original, como nulo, por exemplo, da variável thisType será descartado quando o bloco using terminar de ser executado, mas o objeto thisType criado no bloco não será, embora, eventualmente, receba o lixo coletado.

Para resolver esse erro, use o formulário a seguir:

using (thisType f = new thisType())

{

...

}

Nesse caso, o objeto recém-alocado thisType será descartado.

Exemplo

O código a seguir gerará aviso 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() { }  
}