2012-05-15 4 views
0

Existe-t-il un moyen de transmettre une méthode en tant que paramètre sans rien connaître au préalable de la méthode?Méthode C# en tant que paramètre

Peut-on appeler Func<input, return> sans connaître le paramètre/type de retour de la méthode?

Répondre

6

Le plus proche, vous pouvez venir est d'utiliser Delegate - l'appelant devra choisir le bon type de délégué. C'est exactement pourquoi Control.Invoke utilise Delegate au lieu d'un type délégué spécifique.

Alternativement, il y a MethodInfo comme HackedByChinese suggère. Lequel vous devriez utiliser dépend de ce que vous essayez d'accomplir - chacun est utile dans différents contextes. Si vous essayez de décrire une méthode, alors MethodInfo est probablement la meilleure approche. Si vous essayez de représenter une action appelable d'un certain type (qui peut prendre des paramètres et avoir une valeur de retour) alors un délégué est probablement plus utile.

Si vous nous en dire plus sur ce que vous essayez d'atteindre, nous pouvons être en mesure de vous aider davantage.

+0

Eh oui, vous venez de mentionner :) – Diego

2

vous devez utiliser un délégué pour le faire. Il y a plusieurs messages sur Stackoverflow qui couvrent cela.

Je propose this, spécialement Jon Skeet répondre

2

Semble que vous pourriez overengineering ici .. Vous devriez regarder bien au Infrastructur environnant votre code, et essayer de factoriser qu'au lieu.

Mais si vous en avez vraiment besoin, vous pouvez le faire avec des génériques. Maintenant, je ne recommanderais pas ceci - mais cette fonction que vous pourriez appeler avec n'importe quoi, vous devriez définir Y et T et appeler le temps.

public virtual Y MyWrapperFunction<T,Y>(Func<T,Y> func, T param) 
    { 
     return func(param); 
    } 

Mais attention - les médicaments génériques peuvent vous donner toutes sortes de problèmes différents;)

+0

Merci pour le replies.Basically Je suis en train de passer d'une méthode dans une exception Gestionnaire de gestionnaires qui utilise la gestion des exceptions de la bibliothèque d'entreprise 5. J'essaye de passer n'importe quelle méthode dedans et maintenant dois créer autant de méthodes que j'ai déjà, juste employez un. –

Questions connexes