Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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() { }
}