2011-03-19 1 views
1

J'appelle une méthode de filtrage qui accepte le paramètre prédicats TPassant plusieurs arguments à Prédicat <T>

void MethodName(Predicate<T> param) 
{ 
} 

x.MethodName(x => x.SomeProperty == 10); // or 
x.MethodName(delegate(MyClass x) {return x.SomeProperty == 10;}); 

Le problème est que je dois être en mesure de filtrer sur plusieurs valeurs différentes, et le nombre de valeurs est Unknow . Exemple avec 3 valeurs ouwld être

x.MethodName(x => x.SomeProperty == 10 || x => x.SomeProperty == 20); // or 
x.MethodName(delegate(MyClass x) {return x.SomeProperty == 10 || x.SomeProperty == 20;}); 

Puis-je le faire fonctionner avec un nombre uknown de valeurs possibles? Ce serait greate, mais ce ne est pas possilbe :)

x.MethodName(x => x.SomeProperty == {10, 20}); 

Merci, Goran

+0

Déclarez une liste ou un tableau de '{10,20}' ', puis x => list.Contains (x.SomeProperty) 'devrait faire l'affaire. –

Répondre

1
x.MethodName(x => new []{10, 20}.Contains(x.SomeProperty)); 
+0

Cela va créer un nouveau tableau chaque fois que le prédicat est appelé. Si vous déclarez le tableau en dehors du lambda, le tableau ne sera créé que lorsque le lambda est déclaré. – Gabe

+0

L'OP a mentionné le nombre inconnu d'éléments à comparer mais n'a pas mentionné le nombre de fois que ce filtre serait appelé. Je suppose que c'est juste une fois pour un ensemble donné de valeurs. –

+0

Oui, c'est une seule fois. Peut-être que ce que Gabe voulait dire est, chaque fois que x.SomePropety évalue à une nouvelle valeur (pendant le filtrage), il va recréer le tableau. Exemple, dans une collection de 100 productsts, si je recherche les produits de la catégorie 1. 3 et 5 cela va créer 100 fois ce tableau. Je n'ai pas testé cela, c'est seulement mon interprétation, puisque je vais créer un tableau en dehors de la méthode de toute façon. Merci, cela fonctionne très bien. – Goran

Questions connexes