2010-04-24 11 views
5

Ich möchte definieren, um etwas alsWie ein Prädikat als Funktion Argument

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

ich es muss etwas von der Form erraten würde:

void Start(Predicate predicate) { 
} 

Wie kann ich check innerhalb meiner Start-Funktion immer wenn das Prädikat zu wahr oder falsch ausgewertet? Ist meine Verwendung eines Prädikats korrekt?

Dank

Antwort

10

Hier ist ein triviales Beispiel in einer Funktion ein Prädikat zu verwenden.

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

Sie so etwas tun könnte:

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

Wo Sie das Verfahren wie folgt aufrufen:

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

ich nicht tun weiß, wie nützlich das sein wird. Predicates sind wirklich praktisch für Dinge wie Filterung Listen:

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

Aus gestalterischer Sicht der Zweck eines Prädikats in eine Funktion übergeben wird, in der Regel ist eine IEnumerable zu filtern, das Prädikat gegen jedes Element getestet werden, ob die bestimmen Element ist ein Mitglied der gefilterten Gruppe.

Sie sind besser dran, einfach eine Funktion mit einem booleschen Rückgabetyp in Ihrem Beispiel zu haben.

Verwandte Themen