2010-04-24 50 views
5

Quiero ser capaz de escribir algo tan¿Cómo definir un predicado como un argumento de la función

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

supongo que debe ser algo de la forma:

void Start(Predicate predicate) { 
} 

¿Cómo puedo verificar dentro de mi función de inicio cada vez que el predicado se evalúa como verdadero o falso? ¿Mi uso de un predicado es correcto?

Gracias

Respuesta

10

Aquí está un ejemplo trivial de la utilización de un predicado en una función.

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

Se podría hacer algo como esto:

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

Cuando se llama al método como este:

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

no lo hago sé lo útil que será. Predicates son realmente muy útil para cosas como listas de filtrado:

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

Desde una perspectiva de diseño, con el propósito de un predicado que se pasa a una función es por lo general para filtrar algunos IEnumerable, el predicado está probando contra cada elemento para determinar si el el elemento es un miembro del conjunto filtrado.

Es mejor que simplemente tenga una función con un tipo de retorno booleano en su ejemplo.

Cuestiones relacionadas