2010-04-24 9 views
5

voglio essere in grado di scrivere qualcosa comeCome definire un predicato come argomento di funzione

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

Direi che deve essere qualcosa del tipo:

void Start(Predicate predicate) { 
} 

Come posso controllare all'interno della mia funzione Start ogni volta che il predicato è valutato come vero o falso? Il mio uso di un predicato è corretto?

Grazie

risposta

10

Ecco un esempio banale di utilizzo di un predicato in una funzione.

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

Si potrebbe fare qualcosa di simile:

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

Dove si chiama il metodo come questo:

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

non lo faccio sapere quanto sarà utile. Predicates sono davvero utile per cose come liste di filtraggio:

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

Dal punto di vista di progettazione, lo scopo di un predicato viene passato in una funzione di solito è di filtrare alcuni IEnumerable, il predicato testato contro ogni elemento per determinare se il l'elemento è un membro del set filtrato.

È meglio avere semplicemente una funzione con un tipo di ritorno booleano nell'esempio.

Problemi correlati