Generic Delegates (Action, Func, Predicate)In C#

Ravindra Devrani
2 min readFeb 11, 2024

--

Generic delegate c#, action func predicate in c#

In C#, delegates are used to refer to methods with a specific signature. Generic delegates extend this concept by allowing you to create delegates that can work with any method signature, rather than being tied to a specific signature.

📢If you don’t know about delegates, then you can refer this article.

Here’s a basic example of a generic delegate:

delegate T MyGenericDelegate<T>(T arg);

You can use this generic delegate as follows.

MyGenericDelegate<int> handler1 = CustomSquare;
int square=handler1(4);
Console.WriteLine(square); //16

MyGenericDelegate<string> handler2 = CustomToUpper;
Console.WriteLine(CustomToUpper("helLo")); //HELLO

In-built Generic delegates

C# also comes with inbuilt generic delegates like Action, Func and Predicate.

Action delegate

Action is an in-built delegate that takes 0to n arguments and does not return anything (void type).

 static void Main()
{
// 0 argument
Action Greeting = () =>
{
Console.WriteLine("Hello");
};

// 1 argument
Action<string> messageInUpper = (message) =>
{
Console.WriteLine(message.ToUpper());
};
messageInUpper("hello world..."); //HELLO WORLD...

// 2 arguments
Action<int, int> sum = (a, b) =>
{
Console.WriteLine($"sum of {a} and {b} = {a + b}");
};
sum(11,2); //sum of 11 and 2 = 13
}

Func delegate

Func takes 0 to n arguments and always returns a value. The main difference between Action and Func is, Func always returns the value.

 static void Main()
{
// take 0 args and return 4
Func<int> simple = () =>4;

// takes two integer args return their sum
Func<int,int,int> sum = (x,y)=> x + y;

// takes two integer args return their differece
Func<int,int,int> subtract = (x,y)=> x - y;

Console.WriteLine(simple()); //4
Console.WriteLine(sum(3,2)); //5
Console.WriteLine(subtract(3,2)); //1
}

Predicate delegate

Predicate delegate takes only 1 arguments and returns a boolean value.

static void Main()
{
// return true if passed argument is greater than 4
Predicate<int> simple = (n) => n>4;

Console.WriteLine(simple(4)); //false

}

If you find this article useful, then consider to clap 👏 and share it. You can also follow me on YouTube, I have created lots of content related to .net core and angular.

Connect with me
👉 YouTube: https://youtube.com/@ravindradevrani
👉 Twitter: https://twitter.com/ravi_devrani
👉 GitHub: https://github.com/rd003

Become a supporter ❣️:
You can buy me a coffee 🍵 : https://www.buymeacoffee.com/ravindradevrani

Thanks a lot 🙂🙂

--

--

Ravindra Devrani
Ravindra Devrani

No responses yet