In molti modi C # supporta la programmazione funzionale, ma esiste una (restringente) lista di caratteristiche che si trovano comunemente in linguaggi funzionali tipicamente staticamente mancanti, come ricorsione della coda, applicazione di funzioni parziali, ecc. Di queste funzionalità mancanti, parziali l'applicazione è "inaffidabile" utilizzando le funzionalità del linguaggio esistenti, sebbene sia un po 'prolisso.
Ad esempio,
public static class Program {
public static Func<T2, TResult> PartialApply(
this Func<T1, T2, TResult> function, T1 arg1) {
return t2 => function(arg1, t2);
}
static void Main() {
Func<int, int, int> add = (x, y) => x + y;
var add10 = add.PartialApply(10);
var sum = add10(3); //Result is 13
}
}
Funziona, anche se la mancanza di inferenza di tipo sui delegati lo rende un po 'prolisso. Tuttavia, non ricordo di aver mai visto il codice sorgente in cui C # è usato in questo modo. Ero piuttosto sorpreso che fosse assente nel il libro di Tomas Petricek , che tratta molti modi di usare C # come F #.
C'è una ragione (diversa dalla convenzione) che nessuno stia facendo questo?
Se qualcuno è interessato, qui ho creato un modello T4 in grado di generare funzioni PartialApply
-type per tutti gli argomenti come è necessario semplicemente modificando un numero.