Sobes.tech
Junior — Middle

Πώς διακρίνουμε έναν delegate τύπου Predicate από έναν delegate τύπου Func, και ποιες είναι οι βασικές διαφορές τους;

sobes.tech AI

Απάντηση από AI

Η βασική διαφορά μεταξύ των delegates Predicate και Func στη C# βρίσκεται στις υπογραφές τους και στον σκοπό τους:

  • Predicate<T> — είναι ένας delegate που δέχεται μια παράμετρο τύπου T και επιστρέφει ένα bool. Χρησιμοποιείται για τον έλεγχο μιας συνθήκης (predicat) σε ένα αντικείμενο.

  • Func<T, TResult> — είναι ένας γενικός delegate που δέχεται μια παράμετρο τύπου T και επιστρέφει μια τιμή τύπου TResult. Το Func είναι πιο ευέλικτο, καθώς το TResult μπορεί να είναι οποιοδήποτε τύπο.

Αν το Func επιστρέφει bool και δέχεται μία παράμετρο, είναι λειτουργικά ισοδύναμο με το Predicate.

Παράδειγμα:

Predicate<int> isPositive = x => x > 0;
Func<int, bool> isPositiveFunc = x => x > 0;

bool result1 = isPositive(5);       // true
bool result2 = isPositiveFunc(5);   // true

Επομένως, το Predicate είναι ένας εξειδικευμένος delegate για συνθήκες, και το Func είναι ένας καθολικός delegate για συναρτήσεις με επιστρεφόμενη τιμή.