Open In App

Predicate Delegate in C#

Last Updated : 31 Oct, 2025
Comments
Improve
Suggest changes
16 Likes
Like
Report

In C#, a Predicate is a built-in delegate type used to represent a method that takes one input parameter and returns a boolean value (true or false). It is widely used for testing conditions, especially in filtering data with collections.

Example: Predicate with a Lambda Expression

CSharp
Predicate<int> isEven = n => n % 2 == 0;

Console.WriteLine(isEven(10));
Console.WriteLine(isEven(7));

Output:

True

False

The Predicate<int> delegate takes an integer and checks if it is even. It returns true for 10 and false for 7.

Syntax

public delegate bool Predicate<in T>(T obj);

  • Always takes exactly one parameter of type T.
  • Always returns a bool (true or false).

Key Points

  • Predicate delegates always return a bool.
  • Useful for conditions, filtering and validation.
  • Frequently used with collection methods like Find, FindAll, Exists, RemoveAll.
  • Provides cleaner, reusable and testable condition logic.

Example 1: Predicate with a Named Method

CSharp
class Program {
    static bool CheckPositive(int number) {
        return number > 0;
    }

    static void Main() {
        Predicate<int> isPositive = CheckPositive;

        Console.WriteLine(isPositive(5));
        Console.WriteLine(isPositive(-3));
    }
}

Output:

True

False

The method CheckPositive matches the Predicate signature (takes one parameter, returns bool). So it can be directly assigned to a Predicate delegate.

Example 2: Predicate with Collections

Predicates are very useful in collection methods like List<T>.Find, FindAll, Exists and RemoveAll.

C#
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };

Predicate<int> isEven = n => n % 2 == 0;

var firstEven = numbers.Find(isEven);
var allEven = numbers.FindAll(isEven);

Console.WriteLine($"First Even: {firstEven}");

Console.WriteLine("All Even Numbers:");
allEven.ForEach(n => Console.WriteLine(n));

Output:

First Even: 2

All Even Numbers:

2

4

6

  • Find -> Returns the first element matching the condition.
  • FindAll -> Returns all elements matching the condition.
  • The Predicate makes it easy to pass conditions as reusable delegates.

Example 3: Predicate with Custom Objects

C#
class Student {
    public string Name { get; set; }
    public int Marks { get; set; }
}

class Program {
    static void Main() {
        List<Student> students = new List<Student> {
            new Student { Name = "Alice", Marks = 85 },
            new Student { Name = "Bob", Marks = 40 },
            new Student { Name = "Charlie", Marks = 60 }
        };

        Predicate<Student> hasPassed = s => s.Marks >= 50;

        var passedStudents = students.FindAll(hasPassed);

        Console.WriteLine("Passed Students:");
        passedStudents.ForEach(s => Console.WriteLine($"{s.Name} - {s.Marks}"));
    }
}

Output:

Passed Students:

Alice - 85

Charlie - 60

Here the Predicate checks whether a student has marks greater than or equal to 50. The FindAll method uses this Predicate to return only passing students.

Suggested Quiz
3 Questions

What is the return type of a Predicate delegate?

  • A

    int

  • B

    void

  • C

    bool

  • D

    string

Explanation:


Which collection method commonly uses Predicate delegates?

  • A

    Add

  • B

    FindAll

  • C

    Insert

  • D

    Sort

Explanation:

Methods like FindAll, Find, Exists, RemoveAll accept Predicate delegates for filtering.

What will be the output of the following code?

C#
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };  
Predicate<int> isEven = n => n % 2 == 0;  
var firstEven = numbers.Find(isEven);  
Console.WriteLine(firstEven);
  • A

    1

  • B

    2

  • C

    3

  • D

    4

Explanation:

Find returns the first element matching the Predicate, which is 2.

Image
Quiz Completed Successfully
Your Score :   2/3
Accuracy :  0%
Login to View Explanation
1/3 1/3 < Previous Next >

Article Tags :

Explore