2009-12-10 5 views
10

Est-il possible de conserver la même fonctionnalité dans le code ci-dessous, mais sans avoir à créer le délégué? J'interface avec une API tierce qui contient un certain nombre de diverses méthodes DeleteSomethingX (ref IntPtr ptr) et j'essaie de centraliser le code pour la vérification IntPtr.Zero.Déléguer avec le paramètre ref

private void delegate CleanupDelegate(ref IntPtr ptr); 

... 

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

Qu'est-ce que vous essayez de faire exactement? –

+1

Quel est le problème avec la création du délégué? – SLaks

+0

Etes-vous sûr que l'API tierce ne gère pas un pointeur NULL en tant que NOP? –

Répondre

10

Si vous voulez dire sans déclarer le type de délégué, alors probablement pas; très peu (le cas échéant) de délégués intégrés utilisent ref; mais vous pouvez le rendre générique:

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

Je ne suis pas sûr que cela économise beaucoup cependant. Il peut y avoir quelques astuces ici avec des méthodes d'extension, mais il est difficile de dire sans plus de détails.

Questions connexes