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