11

以下のコードで同じ機能を維持する方法はありますが、デリゲートを作成する必要はありませんか? 多数のさまざまな 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);
    }
}
4

1 に答える 1

10

デリゲート型を宣言しないという意味であれば、おそらくそうではありません。ref;を使用する組み込みのデリゲートはごくわずか (存在する場合)です。しかし、あなたはそれを一般的にすることができます:

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

ただし、これであまり節約できるかどうかはわかりません。ここには拡張メソッドに関するいくつかのトリックもあるかもしれませんが、詳細がわからないとわかりません。

于 2009-12-10T21:20:04.400 に答える