Compilerwarnung (Stufe 2) CS0728

Aktualisiert: November 2007

Fehlermeldung

"Variable" (lokal) dient als Argument für eine using- oder lock-Anweisung, hat jedoch möglicherweise einen falschen Wert zugewiesen bekommen.Der Dispose-Aufruf bzw. das Aufheben der Sperre erfolgt für den ursprünglichen Wert der lokalen Variablen.
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.

Es gibt verschiedene Szenarios, in denen der using-Block bzw. der lock-Block zu zeitweiligen Ressourcenverlusten führt. Im Folgenden ein Beispiel:

thisType f = null;

using (f)

{

f = new thisType();

...

}

In diesem Fall wird der ursprüngliche Wert (z. B. null) der Variablen thisType verworfen, wenn die Ausführung des using-Blocks abgeschlossen ist. Das im Block erstellte thisType-Objekt wird dagegen nicht verworfen, obwohl es schließlich von der Garbage Collection entfernt wird.

Um diesen Fehler zu beheben, verwenden Sie das folgende Format:

using (thisType f = new thisType())

{

...

}

In diesem Fall wird das neu zugeordnete thisType-Objekt verworfen.

Beispiel

Die Warnung CS0728 wird durch folgenden Code generiert.

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