Passare una funzione come parametro in C#

Muhammad Maisam Abbas 16 febbraio 2024
  1. Passa una funzione come parametro con il delegato Func<> in C#
  2. Passa una funzione come parametro all’interno di un’altra funzione con il delegato Azione <> in C#
Passare una funzione come parametro in C#

Questo tutorial introdurrà metodi per passare una funzione come parametro all’interno di un’altra funzione in C#.

Passa una funzione come parametro con il delegato Func<> in C#

Il delegato Func<T1, T-return> definisce una funzione con il parametro T1 e il tipo di ritorno T-return in C#. Possiamo passare una funzione come parametro all’interno di un’altra funzione con il delegato Func<T1, t-return>. Il seguente esempio di codice ci mostra come passare una funzione come parametro all’interno di un’altra funzione con il delegato Func<> in C#.

using System;

namespace pass_function_as_parameter {
  class Program {
    static int functionToPass(int x) {
      return x + 10;
    }
    static void function(Func<int, int> functionToPass) {
      int i = functionToPass(22);
      Console.WriteLine("i = {0}", i);
    }
    static void Main(string[] args) {
      function(functionToPass);
    }
  }
}

Produzione:

i = 32

Abbiamo definito la funzione functionToPass(int x) che prende un valore intero come parametro, lo incrementa con 10 e restituisce il risultato come valore intero. Abbiamo passato la funzione functionToPass() come parametro alla funzione function() con il delegato Func<int, int>. Abbiamo passato il valore 22 alla funzione functionToPass() all’interno della funzione function(). Nella funzione principale, abbiamo chiamato la funzione con la chiamata di funzione function(functionToPass). Il delegato Func<> può essere utilizzato solo per passare le funzioni che restituiscono un valore.

Passa una funzione come parametro all’interno di un’altra funzione con il delegato Azione <> in C#

Se vogliamo passare una funzione che non restituisce un valore, dobbiamo usare il delegato Action<> in C#. Il delegato Action<T> funziona esattamente come il delegato della funzione; serve per definire una funzione con il parametro T. Possiamo usare il delegato Action<> per passare una funzione come parametro a un’altra funzione. Il seguente esempio di codice ci mostra come passare una funzione come parametro all’interno di un’altra funzione con il delegato Action<> in C#.

using System;

namespace pass_function_as_parameter {
  class Program {
    static void functionToPass2(int x) {
      int increment = x + 10;
      Console.WriteLine("increment = {0}", increment);
    }
    static void function2(Action<int> functionToPass2) {
      functionToPass2(22);
    }
    static void Main(string[] args) {
      function2(functionToPass2);
    }
  }
}

Produzione:

increment = 32

Abbiamo definito la funzione functionToPass2(int x) che prende un valore intero come parametro, lo incrementa con 10 e stampa il risultato. Abbiamo passato la funzione functionToPass2() come parametro alla funzione function() con il delegato Action<int>. Abbiamo passato il valore 22 alla funzione functionToPass2() all’interno della funzione function2(). Nella funzione principale, abbiamo chiamato la funzione con la chiamata di funzione function2(functionToPass2). Il delegato Azione <> può essere utilizzato solo per passare le funzioni che non restituiscono alcun valore.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Articolo correlato - Csharp Function