Ler em inglês

Partilhar via


Aviso do compilador (nível 2) CS0728

Atribuição possivelmente incorreta a 'variável' local, que é o argumento para uma instrução using ou lock. A chamada de descarte ou desbloqueio acontecerá no valor original do local.

Existem vários cenários em que using os bloqueios resultarão lock em um vazamento temporário de recursos. Aqui está um exemplo:

thisType f = null;

using (f)

{

f = new thisType();

...

}

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

Para resolver esse erro, use o seguinte formulário:

using (thisType f = new thisType())

{

...

}

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

Exemplo

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