2010-10-26 8 views
2

Je suis un peu flou sur les nouveaux trucs Action/Func/Variance/CoVariance, ce qui est probablement ce dont j'ai besoin.Délégué de paramètre générique?

Ce que je veux est de pouvoir passer un délégué en tant que paramètre à une méthode, qui prend une chaîne et renvoie un booléen. Le problème est que je ne peux pas utiliser un délégué typé ou une interface car il sera utilisé dans différentes bibliothèques qui ne partagent pas les bibliothèques, et les deux seront invoqués par un tiers.

Donc, en général, je veux que le délégué soit déduit par son type d'entrée et de retour.

Il sera comme:

delegate bool IncludeItemDelegate(string item); 

ClassA.FetchItems(int someParameter,includeItemDelegate); 
ClassB.FetchItems(int someParameter,string someOtherParam,includeItemDelegate); 

A et B ne marche pas part des bibliothèques, peut-il être fait?

Répondre

6

prédicats est intégré et signale également l'intention:

ClassA.FetchItems(int someParameter, Predicate<string> filter); 
+0

Oui, c'est plus agréable que Func . – Lunivore

+0

Ah, un peu plus ésotérique peut-être, mais semble correspondre – Homde

7

Que diriez-vous de Func<string,bool>?

+1

Ah, c'est comment vous l'utilisez, c'était facile, merci! :) – Homde

0

Il est également possible de passer la prédicats comme lambda

class A 
{ 
    static public IEnumerable<string> FetchItems(int max, Predicate<string> filter) 
    { 
     var l = new List<string>() {"test", "fest", "pest", "häst"}; 
     return l.FindAll(filter).Take(max); 
    } 
} 

comme celui-ci

var res = A.FetchItems(2, s => s.EndsWith("est")); 
+0

ah, c'est un bon bonus, merci – Homde

Questions connexes