2009-12-10 162 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); 

雖然我不確定這會節省多少。有可能這裏有一些伎倆與擴展方法,但很難說沒有更多的細節。