コンパイラの警告 (レベル 2) CS0728
using または lock ステートメントの引数であるローカルの 'variable' への割り当てが間違っている可能性があります。 Dispose の呼び出しまたはロック解除がローカルの元の値で実行されます。
いくつかのシナリオでは、 using
または lock
ブロックの結果として一時的なリソース リークが発生します。 1 つの例を次に示します。
thisType f = null;
using (f)
{
f = new thisType();
...
}
この場合、変数 thisType
の元の値 (null など) は using
ブロックが実行を終了するときに破棄されますが、ブロック内で作成された thisType
オブジェクトは破棄されず、最終的にガベージ コレクションされます。
このエラーを解決するには、次の形式を使用します。
using (thisType f = new thisType())
{
...
}
この場合、新しく割り当てられた thisType
オブジェクトが破棄されます。
次のコードでは、警告 CS0728 が生成されます。
C#
// 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() { }
}
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。