2010-04-24 5 views
5

Je veux être en mesure d'écrire quelque chose commeComment définir un prédicat comme argument de la fonction

void Start(some condition that might evaluate to either true or false) { 
    //function will only really start if the predicate evaluates to true 
} 

Je suppose que ce doit être quelque chose de la forme:

void Start(Predicate predicate) { 
} 

Comment puis-je vérifier dans ma fonction de démarrage chaque fois que le prédicat évalué à vrai ou faux? Mon utilisation d'un prédicat est-elle correcte?

Merci

Répondre

10

Voici un exemple trivial d'utiliser un prédicat dans une fonction.

static void CheckRandomValueAgainstCriteria(Predicate<int> predicate, int maxValue) 
{ 
    Random random = new Random(); 
    int value = random.Next(0, maxValue); 

    Console.WriteLine(value); 

    if (predicate(value)) 
    { 
     Console.WriteLine("The random value met your criteria."); 
    } 
    else 
    { 
     Console.WriteLine("The random value did not meet your criteria."); 
    } 
} 

...

CheckRandomValueAgainstCriteria(i => i < 20, 40); 
2

Vous pouvez faire quelque chose comme ceci:

void Start(Predicate<int> predicate, int value) 
    { 
     if (predicate(value)) 
     { 
      //do Something 
     }   
    } 

Si vous appelez la méthode comme ceci:

Start(x => x == 5, 5); 

Je ne sachez à quel point cela sera utile. Predicates sont vraiment à portée de main pour des choses comme des listes de filtrage:

List<int> l = new List<int>() { 1, 5, 10, 20 }; 
var l2 = l.FindAll(x => x > 5); 
1

Du point de vue de la conception, l'objet d'un prédicat étant passé dans une fonction est généralement de filtrer certains IEnumerable, le prédicat testé contre chaque élément pour déterminer si la item est un membre de l'ensemble filtré.

Il vaut mieux simplement avoir une fonction avec un type de retour booléen dans votre exemple.