オブジェクトがusingステートメントとうまく合うようなチートシートがあるのではないかと思っていました... SQLConnection
、MemoryStream
など。
connection.Close()
さらに一歩進んで、ステートメントブラケットを使用して、閉じる前に実際にどのように呼び出す必要があるかなど、他の「パズルのピース」を表示することもできます。
そのようなものは存在しますか?そうでなければ、多分私達はそれを作るべきです。
オブジェクトがusingステートメントとうまく合うようなチートシートがあるのではないかと思っていました... SQLConnection
、MemoryStream
など。
connection.Close()
さらに一歩進んで、ステートメントブラケットを使用して、閉じる前に実際にどのように呼び出す必要があるかなど、他の「パズルのピース」を表示することもできます。
そのようなものは存在しますか?そうでなければ、多分私達はそれを作るべきです。
おそらく、これに関する私の投稿http://www.lancemay.com/2010/01/idisposable-cheat-sheet/を見てください。それがあなたが探しているものかどうかはわかりませんが、元の質問に基づいて、そうかもしれません.
Microsoft FxCop には、using ブロックで IDisposbale を使用することをチェックするルールがあります。
次の C# メソッドは、特定のアセンブリで見つかったすべての IDisposable 型を一覧表示します。(使用される名前空間: System、System.Collections.Generic、System.IO、System.Reflection)
static void PrintDisposableTypesFromFile(String path)
{
Assembly assembly = Assembly.LoadFrom(path);
foreach (Type type in assembly.GetTypes())
if (type.GetInterface("IDisposable") != null)
Console.WriteLine(type.FullName);
}
次の C# メソッドは、前のメソッドを利用して、ディレクトリとそのサブディレクトリ内のすべてのアセンブリに対して同じことを行います (例: "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727")。
static void PrintDisposableTypesFromDirectory(DirectoryInfo dir, bool warn)
{
foreach (FileInfo file in dir.GetFiles("*.dll"))
{
try
{
PrintDisposableTypesFromFile(file.FullName);
}
catch (Exception ex)
{
if (warn)
{
Console.Error.WriteLine(
String.Format(
"WARNING: Skipped {0}: {1}",
new object[] { file.FullName, ex.Message }));
}
}
}
// recurse
foreach (DirectoryInfo subdir in dir.GetDirectories())
PrintDisposableTypesFromDirectory(subdir, warn);
}
すべての使い捨てのリストが非常に役立つかどうかはわかりませんが、同様のコードを使用して、.NET フレームワークでサポートされているテキスト エンコーディングの完全なリストなど、他の興味深いものを見つけました。
クラスが実装されているかどうか不明な場合は、ブロックIDisposable
で囲みます。using
コンパイルエラーが発生した場合は、それを削除してください。入力時間は数秒しか失われません。
Visual Studio を使用している場合は、型宣言で F12 キーを押すと、メタデータ画面またはクラス定義 (ソース コードがある場合) に移動します。キーバインドが異なる場合は、右クリックして「定義に移動」してください。そこから、クラスが実装するものを見ることができます。すべてのクラスについて、最初に遭遇したときにこれを実行して、そのクラスで何ができるかを「感じる」ことをお勧めします。
他の回答に加えて、クラスは IDisposable を実装している可能性がありますが、Intellisense リストに Dispose が表示されないことに注意してください。
class MyClass :IDisposable
{
void IDisposable.Dispose()
{
/* Stuff */
}
}
IDisposable を実装する型のリストを取得する簡単な方法は、Reflector をクラックして開き、 に移動しSystem.IDisposable
てノードを展開し、[派生型] ノードを展開することです。
リストが完全であることを確認するには、使用しているすべてのアセンブリが Reflector で「開かれている」ことを確認してください。
ReSharperを使用すると、すべての派生型を表示できます。たぶん、ReSharperなしでオブジェクトブラウザを使ってそれを行うこともできます。インターフェイス定義に移動し、「showinheritors」を探します。
型が IDisposable を実装しているかどうかを確認する手っ取り早い方法は、そのインスタンスを作成し、そのインスタンスに Dispose() メンバー関数があるかどうかを確認することです。そうであれば、IDisposable が実装されていることを 99% 確信できます。