2010-03-15 6 views

Répondre

28

En fait Func est juste un simple délégué déclaré dans le .NET Cadre. En fait, il y a plusieurs délégués ont déclaré Func là:

delegate TResult Func<TResult>() 
delegate TResult Func<T, TResult>(T obj) 
delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2) 
delegate TResult Func<T1, T2, T3, TResult>(T1 obj1, T2 obj2, T3 obj3) 
delegate TResult Func<T1, T2, T3, T4, TResult>(T1 obj1, T2 obj2, T3 obj3, T4 obj4) 

La seule chose que vous pouvez faire est de déclarer votre délégué personnalisé:

delegate bool MyFunc<T1, T2>(T1 a, out T2 b) 
6

Vous devez faire votre propre type de délégué, comme celui-ci:

delegate bool MyFunc(Type1 a, out Type2 b); 
+0

c'est le seul moyen? – Benny

+0

Oui. Les délégués génériques 'Func' sont des types génériques réguliers qui prennent des paramètres de type réguliers. 'out b' n'est pas un type. – SLaks

5

Vous voudrez peut-être repenser votre conception. Avez-vous vraiment besoin de compliquer votre code en ajoutant un paramètre out?

Vous pouvez envelopper le type de retour bool et le second type de sortie dans leur propre classe (ou .NET 4.0 Tuple) et l'utiliser comme un type de retour:

public Func<Type1, Tuple<Type2, bool>> DetectMethod; 

Bien sûr, lorsque vous voulez utiliser la délégués pour référencer les méthodes try-parse, vous êtes sur la bonne voie et vous devrez définir un nouveau délégué comme d'autres déjà décrits.

+0

Il est également plus convivial pour LINQ que les délégués personnalisés avec des paramètres ref ou out. – Libor