編譯器警告 (層級 2) CS0728
可能不正確地指派給了為 using 或 lock 陳述式引數的本機 'variable'。 本機原始值會發生 Dispose 呼叫或解除鎖定。
有許多情況, using
或 lock
區塊會導致暫時性的資源流失。 例如:
thisType f = null;
using (f)
{
f = new thisType();
...
}
在此例中,當 thisType
區塊完成執行,但在區塊內建立的 using
物件沒有被記憶體回收時 (雖然最後還是會回收),會處置變數 thisType
的原始值,例如 null。
若要解決這個錯誤,請使用下列格式:
using (thisType f = new thisType())
{
...
}
在此例中,會處置新配置的 thisType
物件。
下列程式碼會產生警告 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() { }
}