2009-12-10 22 views
10

Czy istnieje sposób na zachowanie tej samej funkcjonalności w poniższym kodzie, ale bez konieczności tworzenia delegata? Współpracuję z interfejsem API innej firmy, który zawiera wiele różnych metod DeleteSomethingX (ref Inttrtr ptr) i próbuję scentralizować kod dla sprawdzenia IntPtr.Zero.Delegat z parametrem ref

private void delegate CleanupDelegate(ref IntPtr ptr); 

... 

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

Co dokładnie próbujesz zrobić? –

+1

Co jest nie tak z tworzeniem delegata? – SLaks

+0

Czy na pewno interfejs API innej firmy nie obsługuje wskaźnika pustego jako NOP? –

Odpowiedz

10

Jeśli masz na myśli bez deklarowania typu delegata, to prawdopodobnie nie; bardzo niewielu (jeśli w ogóle) wbudowanych delegatów używa ref; ale możesz zrobić to ogólne:

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

Nie jestem pewien, czy to oszczędza dużo. Może być tu także kilka sztuczek z metodami rozszerzenia, ale trudno powiedzieć bez większej szczegółowości.