2010-04-24 17 views
5

मैं के रूप मेंकैसे एक समारोह तर्क के रूप में एक विधेय

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

कुछ मुझे लगता है कि होता यह प्रपत्र के बारे में कुछ किया जाना चाहिए लिखने के लिए सक्षम होना चाहते हैं परिभाषित करने के लिए:

void Start(Predicate predicate) { 
} 

मैं कैसे कर सकता है जब भी भविष्यवाणी सही या गलत होती है तो मेरे स्टार्ट फ़ंक्शन के अंदर जांचें? क्या मेरा अनुमान सही है?

धन्यवाद

उत्तर

10

यहाँ एक समारोह में एक विधेय उपयोग करने का एक तुच्छ उदाहरण है।

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

आप कुछ इस तरह कर सकता है:

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

आप कहाँ इस तरह विधि कॉल:

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

मुझे नहीं पता पता है कि यह कितना उपयोगी होगा। Predicates छानने सूचियों जैसी चीजों के लिए वास्तव में आसान कर रहे हैं:

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

एक डिजाइन दृष्टिकोण से, एक विधेय के प्रयोजन के एक समारोह में पारित कर दिया जा रहा है, विधेय प्रत्येक तत्व के खिलाफ परीक्षण किया जा रहा है कि क्या यह निर्धारित करने के कुछ IEnumerable फिल्टर करने के लिए आमतौर पर है आइटम फ़िल्टर किए गए सेट का सदस्य है।

आप अपने उदाहरण में एक बूलियन रिटर्न प्रकार के साथ बस एक समारोह करने से बेहतर हैं।

संबंधित मुद्दे