2009-12-10 6 views
10

デリゲートを作成せずに、以下のコードで同じ機能を維持する方法はありますか?私はいくつかのさまざまなDeleteSomethingX(ref IntPtr ptr)メソッドを含むサードパーティ製のAPIとインターフェイスしていますが、IntPtr.Zeroチェックのコードを集中化しようとしています。参照パラメータ付き代理人

private void delegate CleanupDelegate(ref IntPtr ptr); 

... 

private void Cleanup(ref IntPtr ptr, CleanupDelegate cleanup) 
{ 
    if (ptr != IntPtr.Zero) 
    { 
     cleanup(ref ptr); 
    } 
} 
+2

あなたは何をしようとしていますか? –

+1

デリゲートを作成すると何が問題になりますか? – SLaks

+0

サードパーティAPIがヌルポインタをNOPとして処理していないことは確かですか? –

答えて

10

デリゲートタイプを宣言することなく意味する場合は、おそらくそうではありません。組み込みのデリゲートが(もしあれば)ごくわずかですref;

delegate void ActionRef<T>(ref T value); 

これはあまり保存されません。あるかもしれません。ここでは拡張メソッドでいくつかのトリックがありますが、それ以上の詳細は分かりません。

関連する問題