{"id":741,"date":"2024-12-08T10:10:00","date_gmt":"2024-12-08T16:10:00","guid":{"rendered":"https:\/\/kop.lat\/blog\/?p=741"},"modified":"2024-12-08T10:56:25","modified_gmt":"2024-12-08T16:56:25","slug":"delegates-func-and-action-in-c-net-dotnet","status":"publish","type":"post","link":"https:\/\/kop.lat\/blog\/delegates-func-and-action-in-c-net-dotnet\/","title":{"rendered":"Delegates: Func and Action in C# .Net Dotnet"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\"><strong><code>Func<\/code> and <code>Action<\/code> in C#<\/strong><\/h3>\n\n\n\n<p><code>Func<\/code> and <code>Action<\/code> are <strong>generic delegates<\/strong> provided by .NET to simplify delegate usage. They save you from having to define custom delegate types for common scenarios.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. <code>Func<\/code> Delegate<\/strong><\/h3>\n\n\n\n<ul>\n<li><strong>Purpose<\/strong>: Represents a method that takes input parameters and returns a value.<\/li>\n\n\n\n<li><strong>Signature<\/strong>: <code>Func&lt;T1, T2, ..., TResult&gt;<\/code>\n<ul>\n<li><code>T1, T2, ...<\/code>: Input parameter types.<\/li>\n\n\n\n<li><code>TResult<\/code>: Return type.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Examples of <code>Func<\/code> Usage<\/strong><\/h4>\n\n\n\n<ol>\n<li><strong>Basic Usage<\/strong> <\/li>\n<\/ol>\n\n\n\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\" snippet-height=\"\" style=\"background-color:#5E69FF\"><div class=\"control-language\"><div class=\"dm-buttons\"><div class=\"dm-buttons-left\"><div class=\"dm-button-snippet red-button\"><\/div><div class=\"dm-button-snippet orange-button\"><\/div><div class=\"dm-button-snippet green-button\"><\/div><\/div><div class=\"dm-buttons-right\"><a id=\"dm-copy-raw-code\"><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span><span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a><\/div><\/div><pre class=\" line-numbers\"><code id=\"dm-code-raw\" class=\" no-wrap language-php\">Func&lt;int, int, int> add = (x, y) => x + y; \nConsole.WriteLine(add(5, 3)); \n\/\/ Output: 8<\/code><\/pre><\/div><\/div>\n\n\n\n<ol>\n<li><strong>Single Input, Single Output<\/strong> <\/li>\n<\/ol>\n\n\n\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\" snippet-height=\"\" style=\"background-color:#5E69FF\"><div class=\"control-language\"><div class=\"dm-buttons\"><div class=\"dm-buttons-left\"><div class=\"dm-button-snippet red-button\"><\/div><div class=\"dm-button-snippet orange-button\"><\/div><div class=\"dm-button-snippet green-button\"><\/div><\/div><div class=\"dm-buttons-right\"><a id=\"dm-copy-raw-code\"><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span><span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a><\/div><\/div><pre class=\" line-numbers\"><code id=\"dm-code-raw\" class=\" no-wrap language-php\">Func&lt;int, string> convertToString = (number) => $\"Number: {number}\"; \nConsole.WriteLine(convertToString(42)); \n\/\/ Output: Number: 42<\/code><\/pre><\/div><\/div>\n\n\n\n<ol>\n<li><strong>No Parameters<\/strong> <\/li>\n<\/ol>\n\n\n\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\" snippet-height=\"\" style=\"background-color:#FB8CFF\"><div class=\"control-language\"><div class=\"dm-buttons\"><div class=\"dm-buttons-left\"><div class=\"dm-button-snippet red-button\"><\/div><div class=\"dm-button-snippet orange-button\"><\/div><div class=\"dm-button-snippet green-button\"><\/div><\/div><div class=\"dm-buttons-right\"><a id=\"dm-copy-raw-code\"><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span><span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a><\/div><\/div><pre class=\" line-numbers\"><code id=\"dm-code-raw\" class=\" no-wrap language-php\">Func&lt;string> getGreeting = () => \"Hello, Func!\"; \nConsole.WriteLine(getGreeting()); \n\/\/ Output: Hello, Func!<\/code><\/pre><\/div><\/div>\n\n\n\n<ol>\n<li><strong>Using <code>Func<\/code> as a Parameter<\/strong> <\/li>\n<\/ol>\n\n\n\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\" snippet-height=\"\" style=\"background-color:#C9D8B6\"><div class=\"control-language\"><div class=\"dm-buttons\"><div class=\"dm-buttons-left\"><div class=\"dm-button-snippet red-button\"><\/div><div class=\"dm-button-snippet orange-button\"><\/div><div class=\"dm-button-snippet green-button\"><\/div><\/div><div class=\"dm-buttons-right\"><a id=\"dm-copy-raw-code\"><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span><span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a><\/div><\/div><pre class=\" line-numbers\"><code id=\"dm-code-raw\" class=\" no-wrap language-php\">public static void PerformOperation(int a, int b, Func&lt;int, int, int> operation)\n{ \n  Console.WriteLine($\"Result: {operation(a, b)}\");\n} \nPerformOperation(10, 5, (x, y) => x - y); \n\/\/ Output: Result: 5<\/code><\/pre><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. <code>Action<\/code> Delegate<\/strong><\/h3>\n\n\n\n<ul>\n<li><strong>Purpose<\/strong>: Represents a method that takes input parameters but does <strong>not return a value<\/strong>.<\/li>\n\n\n\n<li><strong>Signature<\/strong>: <code>Action&lt;T1, T2, ...&gt;<\/code>\n<ul>\n<li><code>T1, T2, ...<\/code>: Input parameter types.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Examples of <code>Action<\/code> Usage<\/strong><\/h4>\n\n\n\n<ol>\n<li><strong>Basic Usage<\/strong> <\/li>\n<\/ol>\n\n\n\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\" snippet-height=\"\" style=\"background-color:#C9D8B6\"><div class=\"control-language\"><div class=\"dm-buttons\"><div class=\"dm-buttons-left\"><div class=\"dm-button-snippet red-button\"><\/div><div class=\"dm-button-snippet orange-button\"><\/div><div class=\"dm-button-snippet green-button\"><\/div><\/div><div class=\"dm-buttons-right\"><a id=\"dm-copy-raw-code\"><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span><span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a><\/div><\/div><pre class=\" line-numbers\"><code id=\"dm-code-raw\" class=\" no-wrap language-php\">Action&lt;string> printMessage = (message) => Console.WriteLine(message); \nprintMessage(\"Hello, Action!\"); \n\/\/ Output: Hello, Action!<\/code><\/pre><\/div><\/div>\n\n\n\n<ol>\n<li><strong>Multiple Parameters<\/strong> <\/li>\n<\/ol>\n\n\n\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\" snippet-height=\"\" style=\"background-color:#D4F8FC\"><div class=\"control-language\"><div class=\"dm-buttons\"><div class=\"dm-buttons-left\"><div class=\"dm-button-snippet red-button\"><\/div><div class=\"dm-button-snippet orange-button\"><\/div><div class=\"dm-button-snippet green-button\"><\/div><\/div><div class=\"dm-buttons-right\"><a id=\"dm-copy-raw-code\"><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span><span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a><\/div><\/div><pre class=\" line-numbers\"><code id=\"dm-code-raw\" class=\" no-wrap language-php\">Action&lt;int, int> printSum = (x, y) => Console.WriteLine($\"Sum: {x + y}\"); \nprintSum(3, 4); \n\/\/ Output: Sum: 7<\/code><\/pre><\/div><\/div>\n\n\n\n<ol>\n<li><strong>No Parameters<\/strong> <\/li>\n<\/ol>\n\n\n\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\" snippet-height=\"\" style=\"background-color:#7FC8A9\"><div class=\"control-language\"><div class=\"dm-buttons\"><div class=\"dm-buttons-left\"><div class=\"dm-button-snippet red-button\"><\/div><div class=\"dm-button-snippet orange-button\"><\/div><div class=\"dm-button-snippet green-button\"><\/div><\/div><div class=\"dm-buttons-right\"><a id=\"dm-copy-raw-code\"><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span><span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a><\/div><\/div><pre class=\" line-numbers\"><code id=\"dm-code-raw\" class=\" no-wrap language-php\">Action printHello = () => Console.WriteLine(\"Hello, World!\"); \nprintHello(); \n\/\/ Output: Hello, World!<\/code><\/pre><\/div><\/div>\n\n\n\n<ol>\n<li><strong>Using <code>Action<\/code> as a Parameter<\/strong> <\/li>\n<\/ol>\n\n\n\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\" snippet-height=\"\" style=\"background-color:#7FC8A9\"><div class=\"control-language\"><div class=\"dm-buttons\"><div class=\"dm-buttons-left\"><div class=\"dm-button-snippet red-button\"><\/div><div class=\"dm-button-snippet orange-button\"><\/div><div class=\"dm-button-snippet green-button\"><\/div><\/div><div class=\"dm-buttons-right\"><a id=\"dm-copy-raw-code\"><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span><span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a><\/div><\/div><pre class=\" line-numbers\"><code id=\"dm-code-raw\" class=\" no-wrap language-php\">public static void ProcessAction(Action&lt;string> action, string value) \n{ \naction(value); \n} \nProcessAction((msg) => Console.WriteLine($\"Processed: {msg}\"), \"Action Test\"); \n\/\/ Output: Processed: Action Test<\/code><\/pre><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Comparison of <code>Func<\/code> and <code>Action<\/code><\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Feature<\/th><th><code>Func<\/code><\/th><th><code>Action<\/code><\/th><\/tr><\/thead><tbody><tr><td><strong>Purpose<\/strong><\/td><td>For methods that return a value<\/td><td>For methods with no return value<\/td><\/tr><tr><td><strong>Return Type<\/strong><\/td><td>Has a return type (<code>TResult<\/code>)<\/td><td>Always <code>void<\/code><\/td><\/tr><tr><td><strong>Parameters<\/strong><\/td><td>Can have zero or more input parameters<\/td><td>Can have zero or more input parameters<\/td><\/tr><tr><td><strong>Example<\/strong><\/td><td><code>Func&lt;int, int, int&gt; (x, y) =&gt; x + y<\/code><\/td><td><code>Action&lt;int&gt; (x) =&gt; Console.WriteLine(x)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Real-World Use Cases<\/strong><\/h3>\n\n\n\n<ol>\n<li><strong>Processing Collections<\/strong> <\/li>\n<\/ol>\n\n\n\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\" snippet-height=\"\" style=\"background-color:#abb8c3\"><div class=\"control-language\"><div class=\"dm-buttons\"><div class=\"dm-buttons-left\"><div class=\"dm-button-snippet red-button\"><\/div><div class=\"dm-button-snippet orange-button\"><\/div><div class=\"dm-button-snippet green-button\"><\/div><\/div><div class=\"dm-buttons-right\"><a id=\"dm-copy-raw-code\"><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span><span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a><\/div><\/div><pre class=\" line-numbers\"><code id=\"dm-code-raw\" class=\" no-wrap language-php\">var numbers = new List&lt;int> { 1, 2, 3, 4 }; \n\/\/ Use Func to transform numbers var squares = numbers.Select(x => x * x); \nConsole.WriteLine(string.Join(\", \", squares)); \n\/\/ Output: 1, 4, 9, 16 \n\/\/ Use Action to print each number \nnumbers.ForEach(x => Console.WriteLine($\"Number: {x}\"));<\/code><\/pre><\/div><\/div>\n\n\n\n<ol>\n<li><strong>Event Handling<\/strong> <\/li>\n<\/ol>\n\n\n\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\" snippet-height=\"\" style=\"background-color:#abb8c3\"><div class=\"control-language\"><div class=\"dm-buttons\"><div class=\"dm-buttons-left\"><div class=\"dm-button-snippet red-button\"><\/div><div class=\"dm-button-snippet orange-button\"><\/div><div class=\"dm-button-snippet green-button\"><\/div><\/div><div class=\"dm-buttons-right\"><a id=\"dm-copy-raw-code\"><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span><span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a><\/div><\/div><pre class=\" line-numbers\"><code id=\"dm-code-raw\" class=\" no-wrap language-php\">Action&lt;string> onMessageReceived = (msg) => Console.WriteLine($\"Message: {msg}\");\nonMessageReceived(\"Hello from Action!\"); \n\/\/ Output: Message: Hello from Action!<\/code><\/pre><\/div><\/div>\n\n\n\n<ol>\n<li><strong>Dynamic Calculation Logic<\/strong> <\/li>\n<\/ol>\n\n\n\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\" snippet-height=\"\" style=\"background-color:#5E69FF\"><div class=\"control-language\"><div class=\"dm-buttons\"><div class=\"dm-buttons-left\"><div class=\"dm-button-snippet red-button\"><\/div><div class=\"dm-button-snippet orange-button\"><\/div><div class=\"dm-button-snippet green-button\"><\/div><\/div><div class=\"dm-buttons-right\"><a id=\"dm-copy-raw-code\"><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\" style=\"display:none\">Copied<\/span><span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a><\/div><\/div><pre class=\" line-numbers\"><code id=\"dm-code-raw\" class=\" no-wrap language-php\">Func&lt;int, int, double> divide = (x, y) => (double)x \/ y; \nConsole.WriteLine(divide(10, 3)); \n\/\/ Output: 3.33333333333333<\/code><\/pre><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Key Points<\/strong><\/h3>\n\n\n\n<ul>\n<li>Use <code>Func<\/code> for methods that <strong>return a value<\/strong>.<\/li>\n\n\n\n<li>Use <code>Action<\/code> for methods that <strong>perform actions without returning a value<\/strong>.<\/li>\n\n\n\n<li>Both are extensively used with LINQ, event handlers, and dynamic behaviors.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Func and Action in C# Func and Action are generic delegates provided by .NET to simplify delegate usage. They save you from having to define custom delegate types for common scenarios. 1. Func Delegate Examples of Func Usage 2. Action Delegate Examples of Action Usage Comparison of Func and Action Feature Func Action Purpose For [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":464,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[53,23,136,54,137,138],"_links":{"self":[{"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/posts\/741"}],"collection":[{"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/comments?post=741"}],"version-history":[{"count":4,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/posts\/741\/revisions"}],"predecessor-version":[{"id":747,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/posts\/741\/revisions\/747"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/media\/464"}],"wp:attachment":[{"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/media?parent=741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/categories?post=741"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/tags?post=741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}